Kotlin重载算数运算符

Kotlin重载算数运算符

1.重载二元运算符

我们先尝试将两个坐标相加和相减     

1.1定义plus运算符       

data class Point(val x:Int,val y:Int){
        operator fun plus(other:Point):Point{
            return Point(x+other.x,y+other.y)
        }

        operator fun minus(other:Point):Point{
            return Point(x-other.x,y-other.y)
        }
    }

测试

val p1=Point(3,5)
val p2=Point(5,6)
val p3=p1+p2//p3(8.11)
val p4=p2-p1//p4(2,1)

operator关键字来声明plus函数。在实现了plus函数之后就可以用+号来求和,之所以要使用operator关键在来声明函数是因为要区分同名函数的定义。实际上在我们用+号来求和的时候调用的就是我们实现的plus函数。

1.2把运算符定义为拓展函数

    operator fun Point.plus(other:Point):Point{
        return Point(x+other.x,y+other.y)
    }

可重载二元运算符
表达式函数名
a*btimes
a/bdiv
a%bmod
a+bplus
a-bminus

自定义类型运算符和标准数字类型运算符具有相同的优先级,如*、/的优先级大于+、-。

1.3定义一个运算数据类型不同的运算符

operator fun Point.times(s:Double):Point{
        return Point((x*s).toInt(),(y*s).toInt())
    }

测试

val p5=p1*2.0//p5(6,10)

kotlin运算符不支持交换性,如p1*2.0可行2.0*p1就不可行,如果要支持2.0*p1需要重新定义新的运算符

operator fun Double.times(p:Point):Point

1.4定义一个返回结果不同的运算符

    operator fun Char.times(count:Int):String{
        return toString().repeat(count)
    }

测试

val s='k'*6//kkkkkk

接收一个Char作为左值,Int作为右值,返回一个String类型。

2.重载一元运算符

2.1定义一个一元运算符

    operator fun Point.unaryMinus():Point{
        return Point(-x,-y)
    }

测试

-p1//(-3,-5)

可重载的一元运算符

表达式函数名
+aunaryPlus
-aunaryMinus
!anot
++a,a++inc
--a,a--dec






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值