연산자 오버로딩은 기존 기호에 사용자 타입의 의미를 붙인다. 새 기호를 발명할 수는 없다. 우선순위도 바꿀 수 없다.
대칭과 대입
struct Pos {
int file;
int rank;
bool operator==(const Pos& o) const {
return file == o.file && rank == o.rank;
}
};C++20부터는 `operator==` 하나만 정의해도 `!=`가 만들어지는 경우가 있다. 대입 `operator=`와 복합 대입 `operator+=`는 왼쪽 객체를 바꾸므로 멤버로 둔다. 양쪽이 대칭인 `+`는 멤버가 아닌 함수로 두면 왼쪽 변환도 가능하다.
오버로드하지 않을 연산자
`&&`, `||`, 쉼표 연산자는 오버로드하면 평가 순서가 기본 의미와 달라진다. 멤버 접근 `.`와 영역 `::`는 오버로드할 수 없다. 변환 연산자는 암시적 변환을 늘려 오버로드 해석을 흐리므로 `explicit operator`로 제한한다.
증가 연산자를 만들 때는 전위와 후위를 구분한다. 후위는 더미 `int` 매개변수를 받는 관례가 있다. 정수에서처럼 전위가 더 단순하다.
댓글
0개아직 댓글이 없습니다.