3.4.1 重载单目前缀运算符
data class Data(val x: Int, val y: Int){
//为Data类定义一个unaryMinus()方法
operator fun unaryMinus(): Data {
return Data(-x, -y)
}
}
//以扩展方法的形式为Data类定义not()方法
operator fun Data.not(): Data {
return Data(-x, -y)
}
fun main(args: Array<String>) {
val d = Data(4, 10)
println(-d) //输出Data(x=-4, y=-10)
println(!d) //输出Data(x=-4, y=-10)
}
3.4.2 重载自加和自减
data class Data(val x: Int, val y: Int){
//为Data类定义一个inc()方法
operator fun inc(): Data {
return Data(x + 1, y + 1)
}
}
//以扩展方法的形式为Data类定义dec()方法
operator fun Data.dec(): Data {
return Data(x - 1, y - 1)
}
fun main(args: Array<String>) {
var d = Data(4, 10)
println(d++) //先用、再自加,输出Data(x=4, y=10)
println(d) //输出自加后的d:Data(x=5, y=11)
var dd = Data(9, 20)
println(--dd) //先自减,再用,输出Data(x=8, y=19)
println(dd) //输出自加后的dd:Data(x=8, y=19)
}
3.4.3 重载双目算术运算符
data class Point(val x: Int, val y: Int){
//为Point类定义一个minus()方法
operator fun minus(target: Point): Double{
return Math.hypot((this.x - target.x).toDouble()
, (this.y - target.y).toDouble())
}
}
//以扩展方法的形式为Point类定义times()方法
operator fun Point.times(target: Point): Int {
return Math.abs(this.x - target.x) *
Math.abs(this.y - target.y)
}
fun main(args: Array<String>) {
var p1 = Point(4, 10)
var p2 = Point(5, 15)
var distance = p1 - p2;
println("p1与p2的距离为:${distance}")
var area = p1 * p2
println("p1与p2围成矩形的面积为:${area}")
}
以上内容节选自《疯狂Kotlin讲义》:一本让您最直接认识Kotlin的疯狂讲义

往期连载