오버로딩의 제약 사항
오버로딩의 제약 사항
C++에서 연산자를 오버로딩할 때에는 다음과 같은 사항을 지켜야 합니다.
1. 전혀 새로운 연산자를 정의할 수는 없습니다.
ex) 몫을 나타내기 위한 %%라는 연산자를 새롭게 정의할 수 없습니다.
2. 기본 타입을 다루는 연산자의 의미는 재정의할 수 없으며, 따라서 오버로딩된 연산자의 피연산자 중 하나는 반드시 사용자 정의 타입이어야 합니다.
ex) 두 개의 double 형에 대한 덧셈 연산자(+)가 뺄셈을 수행하도록 오버로딩할 수 없습니다.
3. 오버로딩된 연산자는 기본 타입을 다루는 경우에 적용되는 피연산자의 수, 우선순위 및 그룹화를 준수해야 합니다.
ex) 나눗셈 연산자(/)는 이항 연산자이므로 단항 연산자로 오버로딩할 수 없습니다.
4. 오버로딩된 연산자는 디폴트 인수를 사용할 수 없습니다.
오버로딩할 수 없는 연산자
C++에서는 다음 표의 연산자는 오버로딩할 수 없습니다.
연산자 | 설명 |
---|---|
:: | 범위 지정 연산자 |
. | 멤버 연산자 |
.* | 멤버 포인터 연산자 |
? : | 삼항 조건 연산자 |
sizeof | 크기 연산자 |
typeid | 타입 인식 |
const_cast | 상수 타입 변환 |
dynamic_cast | 동적 타입 변환 |
reinterpret_cast | 재해석 타입 변환 |
static_cast | 정적 타입 변환 |
멤버 함수로만 오버로딩할 수 있는 연산자
C++에서 다음 표의 연산자는 전역 함수가 아닌 멤버 함수로만 오버로딩할 수 있습니다.
연산자 | 설명 |
---|---|
= | 대입 연산자 |
() | 함수 호출 |
[] | 배열 인덱스 |
-> | 멤버 접근 연산자 |