연산자 오버로딩은 기호에 타입의 의미를 붙이는 일이다

p1 + p2가 무엇을 뜻하는지 컴파일러는 모릅니다. operator 함수가 피연산자, 반환값, const 계약을 한곳에 정합니다.

leftPoint p1멤버 함수라면 현재 객체, 즉 this가 됩니다.
+
rightPoint p2보통 const Point&로 받아 불필요한 복사를 피합니다.
=
result새 Point원본을 바꾸지 않고 계산 결과 객체를 반환합니다.
표현식p1 + p2사용자가 읽는 짧은 문법입니다.
실제 호출p1.operator+(p2)컴파일러가 호출할 함수 규칙입니다.
의미기존 C++ 사용자가 기대하는 방향인가?
원본바꾸는 연산인지 새 값을 만드는 연산인지?
위치왼쪽 피연산자를 멤버 함수로 받을 수 있는가?
비용인자와 반환이 불필요한 복사를 만들지 않는가?
직관성 기준: 연산자의 기존 뜻과 타입의 의미가 맞을 때만 오버로딩합니다.