了解重载加功能

时间:2019-01-06 08:54:08

标签: function kotlin operator-overloading

我正在关注kotlin重载教程here,但无法理解此示例:

fun main(args: Array<String>) { 
    val p1 = Point(3, -8) 
    val p2 = Point(2, 9) 
    var sum = Point() 
    sum = p1 + p2 
    println("sum = (${sum.x}, ${sum.y})") 
} 

class Point(val x: Int = 0, val y: Int = 10) { 

    // overloading plus function 
    operator fun plus(p: Point) : Point { 
        return Point(x + p.x, y + p.y) 
    } 
}

运行程序时,输出为:

sum = (5, 1)

具体来说,返回行: return Point(x + p.x, y + p.y)

这条线如何运作?为什么是x + p.x-这些值从何而来?

1 个答案:

答案 0 :(得分:1)

您有一个类class Point(val x: Int = 0, val y: Int = 10),该类具有xy属性。考虑将operator fun plus(p: Point) : Point作为类Point的简单函数,该类接收另一个Point作为参数,创建另一个Point实例,并添加xy当前点和另一点p的坐标并将其返回。因此,在该函数中,您可以访问Point当前实例和另一个Point实例:xy的属性。

我们可以如下读取表达式var sum: Point = p1 + p2: 将p1作为Point的当前实例,将p2添加为Point的另一个实例。在这种情况下,在plus实例上调用p1函数,并传递p2作为该函数的参数。当函数返回变量sum时,它将引用新创建的Point的实例。