C++에서 operator 키워드는 클래스의 인스턴스에 적용될 때 특정 연산자 기호가 어떤 의미를 갖는지 정의하는 함수를 선언합니다. 이를 통해 하나의 연산자에 여러 가지 의미를 부여할 수 있으며, 이를 '오버로딩(overloading)'이라고 합니다. 컴파일러는 피연산자의 타입을 검사하여 연산자의 서로 다른 의미를 구분합니다.
단항 연산자란?
단항 연산자(unary operator)는 하나의 피연산자만을 대상으로 동작하는 연산자입니다. 대표적인 단항 연산자는 다음과 같습니다.
- 증감 연산자:
++(증가),--(감소) - 단항 마이너스 연산자:
- - 논리 NOT 연산자:
!
단항 연산자는 호출된 객체 자신에 대해 동작하며, 일반적으로 +obj, !obj, -obj, ++obj처럼 객체의 왼쪽에 위치합니다(전위 방식). 다만 경우에 따라 obj++나 obj--처럼 후위 방식으로도 사용할 수 있습니다.
단항 '+' 연산자 오버로딩 예제
다음 예제는 전위(prefix) 방식으로 단항 더하기(+) 연산자를 오버로딩하는 방법을 보여줍니다.
#include <iostream>
using namespace std;
class Distance {
private:
int feet; // 0부터 무한대
int inches; // 0부터 12
public:
// 생성자
Distance(int f, int i) {
feet = f;
inches = i;
}
// 거리를 출력하는 메서드
void display() {
cout << "F: " << feet << " I:" << inches <<endl;
}
// 단항 plus(+) 연산자 오버로딩
Distance operator+() {
if(inches == 11) {
inches = 0;
feet = feet + 1;
} else {
inches = inches + 1;
}
return Distance(feet, inches);
}
};
int main() {
Distance D1(3, 4), D2(1, 11);
+D1;
D1.display();
+D2;
D2.display();
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 나타납니다.
F: 3 I:5 F: 2 I:0
코드 설명
이 예제에서 Distance 클래스는 피트(feet)와 인치(inches) 단위로 거리를 표현합니다. 오버로딩된 operator+() 함수는 인치 값을 1씩 증가시키며, 인치가 11일 경우 0으로 초기화하고 피트를 1 증가시킵니다.
첫 번째 객체 D1(3, 4)에 단항 + 연산자를 적용하면 인치가 4에서 5로 증가하여 F: 3 I:5가 출력됩니다. 두 번째 객체 D2(1, 11)에 적용하면 인치가 11이므로 0으로 바뀌고 피트가 1 증가하여 F: 2 I:0이 출력됩니다.
이처럼 단항 연산자를 오버로딩하면 사용자 정의 타입에 대해서도 기본 타입처럼 직관적인 연산을 수행할 수 있어 코드의 가독성과 활용성이 크게 향상됩니다.