天天看點

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