1. 重載二進制運算符
就是重載運算符嘛
注意的是 &&、||、?:、===、!==實時不能被重載的
我們使用
1 + 1
本質上執行的是
1.plus(1)
我們可以重載 plus等函數。
我們接下來來設計一個類,實作複數的基本操作,比如,相加:(1+2i)+(3+4i) = 4+6i 相減: (1+2i)-(3+4i) = -2 - 2i
相乘: (1+2i)*(3+4i)=-5+10i
我們設計Complex類如下:
- 成員變量:實部real,虛部image,都是Int
- 成員方法:加、減、乘
class Complex {
var real: Int = 0
var image: Int = 0
constructor()
constructor(real: Int, image: Int) {
this.real = real
this.image = image
}
}
實作加法的規則是,實部加上實部,虛部加上虛部,減法、除法同理
operator fun plus(c: Complex): Complex {
return Complex(this.real + c.real, this.image + c.image)
}
operator fun minus(c: Complex): Complex {
return Complex(this.real - c.real, this.real - c.real)
}
operator fun times(c: Complex): Complex {
return Complex(this.real * c.real - this.image * c.image, this.real * c.image + this.image * c.image)
}
使用:
val c1 = Complex(1, 1)
val c2 = Complex(2, 2)
val p = c1 + c2
val t = c1 *
2. 重載自增自減一進制運算符
這裡的代碼就不一一贅述,我們隻用知道哪些函數代表哪些一進制運算符就行了:
-
a.unaryPlus()
+a
-
a.unaryMinus()
-a (負數)
-
a.not()
!a
-
a.inc()
a++,++a
-
a.dec()
a–,--a
3. 重載比較運算符
-
a.compareTo(b) > 0
a > b
-
a.compareTo(b) < 0
a < b
-
a.compareTo(b) >= 0
a >= b
-
a.compareTo(b) <= 0
a <= b
4. 重載指派運算符
-
a.plusAssign(b)
a += b
-
a.minusAssign(b)
a -= b
-
a.timesAssign(b)
a *= b
-
a.divAssign(b)
a /= b
-
a.remAssign(b)
a %= b