Kotlin 运算符重载
由于 Kotlin 提供了用户定义的类型,它还提供了额外的功能来重载标准运算符,因此使用用户定义的类型更加容易。所有一元、二元、关系运算符都可以重载。运算符通过成员函数或扩展函数重载。这些函数前面有运算符修饰符。每种类型的运算符都有标准函数,可以根据使用情况进行重载。
一元运算符 –
下表显示了可以为一元运算运算符定义的各种函数。这些函数修改调用实例。
Operator expression | Corresponding function |
---|---|
+x | x.unaryPlus() |
-x | x.unaryMinus() |
!x | x.not() |
这里, x对应于定义运算符的类型。重载的功能在各自的功能中定义。
演示一元运算运算符重载的 Kotlin 程序 -
class UnaryOverload(var str:String) {
// overloading the function
operator fun unaryMinus() {
str = str.reversed()
}
}
// main function
fun main(args : Array) {
val obj = UnaryOverload("HELLO")
println("Initial string is ${obj.str}")y
//calling the overloaded function unaryMinus()
-obj
println("String after applying unary operator ${obj.str}")
}
输出:
Initial string is HELLO
String after applying unary operator OLLEH
递增和递减运算符 –
可以通过以下函数为类型定义递增和递减运算符。这些函数返回一个带有表达式结果的新实例。
Operator expression | Corresponding function |
---|---|
++x | x.inc() |
– – x | x.dec() |
无论是在后缀或前缀表示法中使用,这些函数在这两种情况下都能很好地工作,具有相同的预期输出,正如人们在使用前缀或后缀表示法时所期望的那样。
演示运算符重载的 Kotlin 程序 -
class IncDecOverload(var str:String) {
// overloading increment function
operator fun inc(): IncDecOverload {
val obj = IncDecOverload(this.str)
obj.str = obj.str + 'a'
return obj
}
// overloading decrement function
operator fun dec(): IncDecOverload {
val obj = IncDecOverload(this.str)
obj.str = obj.str.substring(0,obj.str.length-1)
return obj
}
override fun toString(): String {
return str
}
}
// main function
fun main(args: Array) {
var obj = IncDecOverload("Hello")
println(obj++)
println(obj--)
println(++obj)
println(--obj)
}
输出:
Hello
Helloa
Helloa
Hello
二元运算符 –
下表显示了要定义的二元运算符及其等效函数。所有这些函数都会修改调用实例。
Operator expression | Corresponding function |
---|---|
x1 + x2 | x1.plus(x2) |
x1 – x2 | x1.minus(x2) |
x1 * x2 | x1.times(x2) |
x1/ x2 | x1.div(x2) |
x1 % x2 | x1.rem(x2) |
x1..x2 | x1.rangeTo(x2) |
Kotlin 程序重载加号函数——
class Object(var objName: String) {
// Overloading the function
operator fun plus(b: Int) {
objName = "Name is $objName and data is $b"
}
override fun toString(): String {
return objName
}
}
// main function
fun main() {
val obj = Object("Chair")
// Calling the overloaded function
obj+9
println(obj)
}
输出:
Name is Chair and data is 9
注意 -关系运算符没有要定义的任何特定功能,要在用户定义类型的实例上使用关系运算符,该类型必须实现Comparable接口。
其他运算符——
Kotlin 支持广泛的运算符,因此为类型定义每个运算符并不是一个好的编程习惯。下表显示了一些其他可以重载的有用运算符是 Kotlin。
Operator expression | Corresponding function |
---|---|
x1 in x2 | x2.contains(x1) |
x1 !in x2 | !x2.contains(x1) |
x[i] | x.get(i) |
x[i, j] | x.get(i, j) |
x[i] = b | x.set(i, b) |
x[i, j] = b | x.set(i, j, b) |
x() | x.invoke() |
x(i) | x.invoke(i) |
x(i, j) | x.invoke(i, j) |
x1 += x2 | x1.plusAssign(x2) |
x1 -= x2 | x1.minusAssign(x2) |
x1 *= x2 | x1.timesAssign(x2) |
x1 /= x2 | x1.divAssign(x2) |
x1 %= x2 | x1.remAssign(x2) |
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。