Посмотрите, это очень просто.
Вы определили структуру, представляющую точку. Если у вас есть два таких структур, код в вопросе определяет оператор сравнения для них, так что вы можете написать что-то вроде
if (pt1 < pt2) { ...
Как компилятор лечить <
знак? В C++ он делает следующее: выражение pt1 < pt2
интерпретируется как pt1.operator < (pt2)
. То есть, вызывается метод со специальным именем operator <
объекта pt1
, аргумент которого равен pt2
.
Давайте посмотрим, что он делает. const Point &p
в своем аргументе обозначает другой сравниваемый операнд. const
говорит, что мы не собираемся изменять операнд (это позволяет компилятору создавать более эффективный код), а &
означает, что мы не копируем переданный struct
, но работаем с фактическим экземпляром Point
(это происходит быстрее, так как нет копирования для сравнения).
Теперь выражение x<p.x
проверяет значение x
в левом операнде (это this
объект, то есть объект в контексте которого метод работает) ли * против x
от правого операнда , Затем код проверяет случай, когда левая x
равна правой, поэтому сравниваются y
.
* Для языковых пуристов: формулировка не точна, но для начинающих, ориентированных на объяснение должно быть в порядке.
это может помочь вам: http://stackoverflow.com/q/4421706/1025391 – moooeeeep
+1 для хорошо спроектированного вопроса. -1 для использования SO в качестве учебника C++. –