1. 程式人生 > >kotlin運算子過載

kotlin運算子過載


//運算子過載定義
//任意類可以定義或者過載父類的基本運算子
//通過運算子的具名函式定義
//
//過載運輸符 方法名稱  引數個數要對應 引數型別和返回值可以隨意定義

class Complex(var real:Double,var imaginary:Double){
    //
    operator fun plus(other:Complex):Complex{//定義運算子
        return Complex(real+other.real,imaginary+other.imaginary)
    }
    operator fun plus(a:Int):Complex{//定義運算子 可以定義引數型別
        return Complex(real,imaginary+a)
    }
    operator fun plus(other:Any):Int{//定義運算子 可以隨意定義返回值
        return real.toInt()
    }
    operator fun invoke():Double{
        return Math.hypot(real,imaginary)
    }

    override fun toString(): String {
        return "${real}  ${imaginary}i"
    }
}
class Book{
    infix fun on(a:Any):Boolean{//定義中綴表示式
        return false
    }
}
class Desk
fun main(args:Array<String>){
    val c1 = Complex(3.0,4.0)
    val c2 = Complex(2.8,3.4)
    println(c1+c2)//
    println(c1+5)
    println(c1())//取模運算
    println(Book() on Desk())//infix定義中綴表示式 不需要.方法名  可以作為運算子使用
}