C++에서 operator 키워드는 클래스 인스턴스에 특정 연산자 기호가 적용될 때 그 의미를 정의하는 함수를 선언합니다. 이를 통해 하나의 연산자가 여러 가지 의미를 가질 수 있게 되며, 이를 "오버로딩(overloading)"이라고 부릅니다. 컴파일러는 피연산자의 타입을 검사하여 연산자의 서로 다른 의미를 구분합니다.
단항 연산자란 무엇인가?
단항 연산자(unary operator)는 하나의 피연산자에만 작용하는 연산자입니다. 대표적인 단항 연산자는 다음과 같습니다.
- 증가(
++) 및 감소(--) 연산자 - 단항 마이너스(
-) 연산자 - 논리 NOT(
!) 연산자
단항 연산자는 호출된 객체 자체에 대해 동작하며, 일반적으로 !obj, -obj, ++obj처럼 객체의 왼쪽에 위치합니다(전위 표기법). 다만 obj++나 obj--처럼 후위 표기법으로도 사용할 수 있습니다.
예제 코드
다음 예제는 논리 NOT(!) 연산자를 전위 방식으로 오버로딩하는 방법을 보여줍니다.
#include <iostream>
using namespace std;
class Distance {
private:
int feet; // 0 이상
int inches; // 0 to 12
public:
// 생성자
Distance(int f, int i) {
feet = f;
inches = i;
}
// 거리를 출력하는 메서드
void display() {
cout << "F: " << feet << " I:" << inches << endl;
}
// NOT(!) 연산자 오버로딩
Distance operator!() {
feet = -feet;
inches = -inches;
return Distance(feet, inches);
}
};
int main() {
Distance D1(3, 4), D2(-1, 10);
!D1;
D1.display(); // D1 출력
!D2; // 부호 반전 적용
D2.display(); // D2 출력
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
F: -3 I:-4
F: 1 I:-10
이처럼 operator! 함수를 멤버 함수로 정의하면, ! 연산자가 해당 클래스 객체에 적용될 때 feet와 inches 값의 부호를 반전시키는 동작을 수행하게 됩니다. 같은 방식으로 단항 마이너스(-)나 증감 연산자(++, --)도 손쉽게 오버로딩할 수 있습니다.