天天看点

Kotlin学习(11)运算符重载与约定

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