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






