연산자 오버 로드에 대 한 일반 규칙
어떻게 오버 로드 된 연산자는 다음과 같은 규칙이 제한 구현 됩니다.그러나 적용 하지 않습니다는 새 및 삭제 연산자에 별도로 설명 합니다.
새 연산자를 정의할 수 없습니다 **.
기본 제공 데이터 형식에 적용할 때 연산자의 의미를 다시 정의할 수 없습니다.
오버 로드 된 연산자는 비정적 클래스 멤버 함수 또는 전역 함수의 중 하나 여야 합니다.클래스가 전용 또는 보호 된 멤버에 액세스 해야 하는 전역 함수를 클래스의 friend로 선언 되어야 합니다.전역 함수는 클래스에 대 한 참조 또는 열거 형식을 클래스 또는 열거 형식이 중입니다 또는 하나 이상의 인수를 취해야 합니다.예를 들면 다음과 같습니다.
// rules_for_operator_overloading.cpp class Point { public: Point operator<( Point & ); // Declare a member operator // overload. // Declare addition operators. friend Point operator+( Point&, int ); friend Point operator+( int, Point& ); }; int main() { }
앞의 코드 예제에서는 보다 작음을 선언-연산자와 멤버 함수입니다. 그러나 더하기 연산자에 friend 액세스 전역 함수로 선언 됩니다.참고 두 개 이상 구현에 주어진된 연산자를 제공할 수 있습니다.앞의 더하기 연산자는 두 가지 구현 commutativity을 쉽게 하기 위해 제공 됩니다.추가 하기만 하면 대개 해당 운영자로 되는 Point 에 Point, int 에 Point, 구현할 수 있습니다.
그룹화 연산자 우선 순위를 준수 하 고 일반적인 사용으로 기본 제공 형식으로 피연산자 수를 결정 합니다.따라서 되는 개념을 표시할 수 없습니다 "2-3 종류의 개체에 추가 Point," 2 추가할 필요 합니다는 x 추가할 및 3의 y 조정 합니다.
단항 연산자를 멤버 함수로 선언 된 인수를 사용 합니다. 전역 함수로 선언 하는 경우 인수 하나를 사용 합니다.
이항 연산자를 멤버 함수로 선언 된 인수 하나를 사용 합니다. 전역 함수로 선언 하는 경우 두 개의 인수를 사용 하 게 됩니다.
단항 또는 이항 연산자와 연산자를 사용할 수 있는 경우 (및, *, +, 및 -)을 사용할 때마다 개별적으로 오버 로드할 수 있습니다.
오버 로드 된 연산자는 기본 인수를 사용할 수 없습니다.
모든 배정 제외 하 고 연산자 오버 로드 (operator=) 파생된 클래스에서 상속 됩니다.
클래스 형식의 개체 멤버 함수 오버 로드 된 연산자에 대 한 첫 번째 인수를 항상 됩니다 연산자 (연산자를 선언 하거나 해당 클래스에서 파생 된 클래스의 클래스) 호출 합니다.첫 번째 인수에 대해 변환이 제공 합니다.
참고 해당 연산자의 의미를 완전히 변경할 수 있습니다.이러한 주소 중의 의미를 포함 (및), 배정 (=), 및 함수 호출 연산자입니다.기본 제공 형식에 대 한 시 데 사용할 수 있는 id가 연산자 오버 로드를 사용 하 여 변경할 수 있습니다.예를 들어, 다음과 같은 네 개의 문을 완전히 계산 하면 일반적으로 동일 합니다.
var = var + 1;
var += 1;
var++;
++var;
연산자를 오버 로드 하는 클래스 형식에 대해이 id에 의존해 수 없습니다.또한 기본 형식에 대 한 이러한 연산자의 사용에서 암시적 요구 사항의 일부 오버 로드 된 연산자에 대 한를 완화 됩니다.예를 들어, 더하기/할당 연산자를 +=, 연산 하는 기본 형식에; 적용 경우 l-value가 필요 합니다. 연산자를 오버 로드할 때와 같은 요구 사항이입니다.
[!참고]
일관성을 위해 모델의 기본 제공 형식에 연산자 오버 로드를 정의 하는 경우 수행 하는 것이 종종 있습니다.다른 컨텍스트에서 의미를 오버 로드 된 연산자의 의미 체계를 크게 다를 경우 유용 하 게 보다 오히려 혼동을 줄 수 있습니다.