1、定义
运算符重载就是对已有的运算符赋予他们新的含义。重载的修饰符是operator
比如我们的+号,它的含义是两个数值相加:1+1=2。+ 号对应的函数名是plus
然后对+号这个函数进行重载,可以让它可以实现减法的效果。
这里我们实现了一个Person数据类,然后重载了Int的 + 号运算符,让一个Int对象可以直接和Person对象相加。返回的结果是这个Int对象减去Person对象的age的值所返回的的Int值。
data class Person(var name: String, var age: Int)
operator fun Int.plus(b: Person): Int {
return this - b.age
}
fun main() {
val person1 = Person("A", 3)
val testInt = 5
println("testInt+person1=${testInt +person1}")
}
//输出结果
testInt+person1=2
2、原理
运算符重载实际上是函数重载,本质上是对运算符函数的调用,从运算符到对应函数的映射过程由编译器完成
3、作用
给我们的类提供一些自己定义的操作运算符。
比如:我们定义了Person的数据类,然后我们重载+号运算符,让我们的Person对象可以直接调用+号来做一些函数操作。
这里我们重载了plus()函数,也就是+号,然后让它实现了两个Person相加的时候,让他们的name和age互相相加,然后返回一个新的Person对象。
data class Person(var name: String, var age: Int){
operator fun plus(other:Person):Person{
return Person(this.name+"+"+other.name,this.age+other.age)
}
}
fun main() {
var person1=Person("A",3)
var person2=Person("B",4)
var person3=person1+person2
println("person3=$person3")
}
//输出结果
person3=Person(name=A+B, age=7)
4、常用的运算符及对应的函数名
4.1一元运算符
表达式 函数名
截屏2020-10-17 上午9.21.44.png
网友评论