[C++] 연산자 오버로딩에 대하여
- Language/C , C++ , C#
- 2021. 2. 26.
연산자 오버로딩이란?
연산자 오버로딩이란 연산자를 재정의하여 사용자가 원하는 형태로 사용이 가능하게끔 하는것을 말합니다. 대부분의 기본 제공 연산자 함수는 전역 함수 또는 클래스로 재정의 가능합니다. 오버로드 된 연산자는 함수로 구현됩니다. 이렇게 재정의된 연산자 함수는 연산자를 이용하듯 호출할 수 있습니다. 이렇게 연산자들을 함수로 만들어서 넣어주면 사용자는 훨씬 더 간결한 방법으로 코드를 작성할수도 있고 코드의 확장성도 높아집니다.
연산자 오버로딩 사용시 주의점
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;
}
간단하게 연산자 오버로딩을 사용하여 객체의 사칙연산시 로그를 남기는 예제를 만들어보았습니다. 위의 예제처럼 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;
}
클래스의 멤버 함수로 연산자 오버로딩하면 인자값을 하나밖에 받을 수 없어 (객체 연산자)이런식으로 항상 연산자가 객체 뒤에 와야만 연산이 가능하지만 전역함수로 연산자 오버로딩을 하면 첫번째 파라미터로 일반 변수 타입을 받을수도 있고 사용시 (연산자 객체) 이렇게도 사용이 가능합니다.
'Language > C , C++ , C#' 카테고리의 다른 글
[C++] 예외 처리 (Exception Handling) try, catch ,throw (0) | 2021.03.03 |
---|---|
[C++] string 클래스 (문자열 다루기) 사용법 & 예제 총정리 (0) | 2021.02.27 |
[C++] 복사 생성자, 복사 대입 연산자 (+깊은 복사) (0) | 2021.02.25 |
[C++] 순수 가상 함수, 추상 클래스에 대하여 (0) | 2021.02.25 |