연산자 오버로드

operator 키워드(keyword) 클래스 인스턴스에 적용할 때 연산자 기호의미를 지정하는 함수를 선언합니다. 이 키워드는 연산자에게 둘 이상의 의미를 제공 즉, 오버로드합니다. 컴파일러는 피연산자의 형식을 검사하여 연산자의 여러 가지 의미 간을 구분합니다.

구문

typeoperatoroperator-symbol(parameter-list)

설명

대부분의 기본 제공 연산자의 함수는 전역적으로 또는 클래스 단위로 다시 정의할 수 있습니다. 오버로드된 연산자는 함수로 구현됩니다.

오버로드된 연산자의 이름은 x입니다operator. 여기서 x는 다음 표에 표시된 연산자입니다. 예를 들어 더하기 연산자를 오버로드하려면 operator+라는 함수를 정의합니다. 마찬가지로 더하기/대입 연산+=자를 오버로드하려면 operator+=라는 함수를 정의합니다.

다시 정의할 수 있는 연산자

연산자 이름 Type
, Comma 이진
! 논리 NOT 단항
!= 같지 않음 이진
% 모듈러스 이진
%= 모듈러스 대입 이진
& 비트 AND 이진
& Address-of 단항
&& 논리적 AND 이진
&= 비트 AND 대입 이진
( ) 함수 호출
( ) 캐스트 연산자 단항
* 곱하기 이진
* 포인터 역참조 단항
*= 곱하기 할당 이진
+ 더하기 이진
+ 단항 더하기 단항
++ 분 1 단항
+= 더하기 할당 이진
- 빼기 이진
- 단항 부정 연산자 단항
-- 감소 1 단항
-= 빼기 할당 이진
-> 멤버 선택 이진
->* 멤버 포인터 선택 이진
/ 나누기 이진
/= 나누기 할당 이진
< 보다 작음 이진
<< 왼쪽 시프트 이진
<<= 왼쪽 시프트 할당 이진
<= 보다 작거나 같음 이진
= 양도 이진
== Equality 이진
> 보다 큼 이진
>= 크거나 같음 이진
>> 오른쪽 시프트 이진
>>= 오른쪽 시프트 할당 이진
[ ] 배열 첨자
^ 배타적 OR 이진
^= 배타적 OR 할당 이진
| 포괄적 비트 OR 이진
|= 포괄적 비트 OR 대입 이진
|| 논리적 OR 이진
~ 1의 보수 단항
delete 삭제
new 새로 만들기
conversion operators conversion operators 단항

1 단항 증가 및 감소 연산자의 두 가지 버전이 있습니다. 즉, 사전 증가 및 사후 증가입니다.

자세한 내용은 운영자 오버로드에 대한 일반 규칙을 참조하세요. 다양한 범주의 오버로드된 연산자에 대한 제약 조건이 다음 항목에 설명되어 있습니다.

다음 테이블의 연산자는 오버로드할 수 없습니다. 테이블에는 전처리기 기호 및 ###.

다시 정의할 수 없는 연산자

연산자 이름
. 멤버 선택
.* 멤버 포인터 선택
:: 범위 확인
? : 조건부
# 문자열로 전처리기 변환
## 전처리기 연결

오버로드된 연산자는 코드에서 발견되었을 때 일반적으로 컴파일러에 의해 암시적으로 호출되지만 다음과 같이 멤버 또는 비멤버 함수가 호출될 때처럼 명시적으로 호출할 수 있습니다.

Point pt;
pt.operator+( 3 );  // Call addition operator to add 3 to pt.

예시

다음 예제에서는 연산자를 + 오버로드하여 두 개의 복소수를 추가하고 결과를 반환합니다.

// operator_overloading.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

struct Complex {
   Complex( double r, double i ) : re(r), im(i) {}
   Complex operator+( Complex &other );
   void Display( ) {   cout << re << ", " << im << endl; }
private:
   double re, im;
};

// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
   return Complex( re + other.re, im + other.im );
}

int main() {
   Complex a = Complex( 1.2, 3.4 );
   Complex b = Complex( 5.6, 7.8 );
   Complex c = Complex( 0.0, 0.0 );

   c = a + b;
   c.Display();
}
6.8, 11.2

이 섹션의 내용

참고 항목

C++ 기본 제공 연산자, 우선 순위 및 결합성
키워드