任何类可以定义或者重载父类的基本运算符
通过运算符对应的具名函数来定义
对参数个数作要求,对参数和返回值类型不作要求
不能像Scalag 样定义任意运算符
package fenglei.demo.referenceType
//运算符重载
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(other:Any):Int{
return 1
}
override fun toString(): String {
return "${real}+${imaginary}"
}
}
fun main(args: Array<String>) {
val c1=Complex(3.0,4.0)
val c2=Complex(2.0,7.5)
println(c1+c2)//5.0+11.5
println(c1+2)//1
}
也可以自定义运算符
//自定义运算符
//一般情况下不会使用。主要用于DSL
class Book{
//infix中缀表达式
infix fun on(any:Any):Boolean{
return true
}
}
class Desk
fun main(args: Array<String>) {
if(Book() on Desk()){
println("自定义运算符on")
}
}