当前位置: 代码迷 >> 综合 >> Kotlin-14-运算符重载(operator)
  详细解决方案

Kotlin-14-运算符重载(operator)

热度:34   发布时间:2023-10-09 05:40:39.0

目录

1、定义

2、原理

3、作用

4、常用的运算符及对应的函数名

4.1一元运算符

4.2、二元运算符

4.3、复杂运算符

4.4、比较运算符

5、注意


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 = 5println("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+person2println("person3=$person3")
}//输出结果
person3=Person(name=A+B, age=7)

4、常用的运算符及对应的函数名

4.1一元运算符

表达式 函数名
+a unaryPlus
-a unaryMinus
!a not
++a, a++ inc
--a, a-- dec

4.2、二元运算符

a + b a.plus(b)
a - b a.minus(b)
a * b a.tiems(b)
a / b a.div(b)
a % b a.rem(b) 或 a.mod(b)
a .. b a.rangTo(b)

4.3、复杂运算符

操作符 表示 重载
a += b a = a + b a = a.plus(b)
a -= b a = a - b a = a.minus(b)
a *= b a = a * b a = a.tiems(b)
a /= b a = a / b a = a.div(b)
a %= b a = a % b a = a.rem(b)

4.4、比较运算符

表达式 函数名
a == b a?.equals(b) ?: (b === null)
a != b !(a?.equals(b) ?: (b === null))
a > b a.compareTo(b) > 0
a < b a.compareTo(b) < 0
a >= b a.compareTo(b) >= 0
a <= b a.compareTo(b) <= 0

5、注意

Kotlin中的 && 、 || 、 ?: 、 === 、 !== 是不能被重载的

 

 

 

 

 

 

  相关解决方案