[C++] 연산자 오버로딩에 대하여

연산자 오버로딩이란?

연산자 오버로딩이란 연산자를 재정의하여 사용자가 원하는 형태로 사용이 가능하게끔 하는것을 말합니다. 대부분의 기본 제공 연산자 함수는 전역 함수 또는 클래스로 재정의 가능합니다. 오버로드 된 연산자는 함수로 구현됩니다. 이렇게 재정의된 연산자 함수는 연산자를 이용하듯 호출할 수 있습니다. 이렇게 연산자들을 함수로 만들어서 넣어주면 사용자는 훨씬 더 간결한 방법으로 코드를 작성할수도 있고 코드의 확장성도 높아집니다.

 

연산자 오버로딩 사용시 주의점

1. C++에서 사용되지 않는 연산자는 재정의 할 수 없습니다.

2 기본 제공 데이터 형식에 적용할때 연산자의 의미를 다시 정의할 수 없습니다.

3. 오버로딩 한 연산자는 클래스 멤버함수이거나 전역함수여야만 합니다.

 

연산자 오버로딩 할 수 없는 연산자들

연산자 사용처
. 멤버 선택
.* 멤버의 포인터 선택
:: 범위지정 연산자
?: 조건 연산자
# 문자열 전처리기 변환
## 문자열 전처리기 연결

 

연산자 오버로딩 사용법


  
#include <iostream>
using namespace std;
class myOperation {
public:
void operator+ (int num) {
cout << "+를 한다." << endl;
}
void operator- (int num) {
cout << "-를 한다." << endl;
}
void operator* (myOperation oper) {
cout << "*를 한다." << endl;
}
void operator/ (myOperation oper) {
cout << "/를 한다." << endl;
}
};
int main() {
myOperation a, b;
a + 1;
a - 2;
a * b;
a / b;
}

연산자 오버로딩 예제1

간단하게 연산자 오버로딩을 사용하여 객체의 사칙연산시 로그를 남기는 예제를 만들어보았습니다. 위의 예제처럼  operator 연산자 이런식으로 함수명을 지정하게 되면 연산자를 오버로딩할 수 있습니다.

 

전역함수 연산자 오버로딩


  
#include <iostream>
using namespace std;
class myOperation {};
void operator+ (myOperation oper) {
cout << "+를 한다." << endl;
}
void operator- (myOperation operr) {
cout << "-를 한다." << endl;
}
void operator* (int num, myOperation oper) {
cout << "*를 한다." << endl;
}
void operator/ (int num, myOperation oper) {
cout << "/를 한다." << endl;
}
int main() {
myOperation a;
+a ;
-a;
1 * a;
1 / a;
}

연산자 오버로딩 예제2

클래스의 멤버 함수로 연산자 오버로딩하면 인자값을 하나밖에 받을 수 없어 (객체 연산자)이런식으로 항상 연산자가 객체 뒤에 와야만 연산이 가능하지만 전역함수로 연산자 오버로딩을 하면 첫번째 파라미터로 일반 변수 타입을 받을수도 있고 사용시 (연산자 객체) 이렇게도 사용이 가능합니다.

코딩팩토리님의
글이 좋았다면 응원을 보내주세요!

Designed by JB FACTORY