Понимание перегрузки плюс функция - PullRequest
0 голосов
/ 06 января 2019

Я следую учебнику по перегрузке kotlin здесь и не могу понять этот пример:

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 голосов
/ 06 января 2019

У вас есть класс class Point(val x: Int = 0, val y: Int = 10), который имеет свойства x и y. Рассмотрим operator fun plus(p: Point) : Point как простую функцию класса Point, которая получает еще один Point в качестве параметра, создает другой экземпляр Point, добавляя x и y координаты текущей и другой точки p и возвращает ее , Таким образом, в этой функции у вас есть доступ к свойствам текущего экземпляра Point и другого экземпляра Point: x и y.

Мы можем прочитать выражение var sum: Point = p1 + p2 как следующее: принять p1 в качестве текущего экземпляра Point, добавить p2 в качестве другого экземпляра Point. В этом случае функция plus вызывается для экземпляра p1 с передачей p2 в качестве аргумента этой функции. Когда функция возвращает переменную, sum будет ссылаться на экземпляр только что созданного Point.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...