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