Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 단항 연산자 오버로딩 완벽 가이드: 개념부터 실전 예제까지

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 값의 부호를 반전시키는 동작을 수행하게 됩니다. 같은 방식으로 단항 마이너스(-)나 증감 연산자(++, --)도 손쉽게 오버로딩할 수 있습니다.