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

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

C++ 단항 연산자 오버로딩이란?

단항 연산자(unary operator)는 하나의 피연산자만을 대상으로 작동하는 연산자입니다. C++ 컴파일러는 피연산자의 자료형을 검사함으로써 같은 연산자 기호라도 상황에 따라 다른 의미로 해석합니다.

C++에서 대표적으로 사용되는 단항 연산자는 다음과 같습니다.

  • 증가(++) 및 감소(--) 연산자
  • 단항 마이너스(-) 연산자
  • 논리 NOT(!) 연산자

단항 연산자는 호출된 객체 자신에 대해 작동하며, 일반적으로 !obj, -obj, ++obj처럼 객체의 왼쪽(전위, prefix)에 위치합니다. 다만 필요에 따라 obj++obj--처럼 후위(postfix) 형태로도 사용할 수 있습니다.

다음 예제는 느낌표(!) 연산자를 전위 방식으로 오버로드하는 방법을 보여줍니다.

예제 코드

#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;
   }
   // 오버로드된 느낌표(!) 연산자
   Distance operator!() {
      feet = -feet;
      inches = -inches;
      return Distance(feet, inches);
   }
};

int main() {
   Distance D1(3, 4), D2(-1, 10);
   !D1;
   D1.display();     // D1 출력
   !D2;              // 부정(negation) 적용
   D2.display();     // D2 출력
   return 0;
}

코드 설명

위 예제에서 operator!() 함수는 Distance 클래스의 멤버 함수로 정의되었습니다. 이 연산자가 호출되면 객체의 feetinches 값에 음수 부호를 적용한 뒤, 변경된 값으로 새로운 Distance 객체를 생성하여 반환합니다. main() 함수에서 !D1을 호출하면 D1의 모든 멤버 변수 값이 부호 반전되어 저장됩니다.

실행 결과

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 출력됩니다.

F: -3 I:-4
F: 1 I:-10

출력 결과를 보면 처음 값이 (3, 4)였던 D1은 (-3, -4)로, (-1, 10)이었던 D2는 (1, -10)으로 각각 부호가 반전된 것을 확인할 수 있습니다. 이처럼 연산자 오버로딩을 활용하면 사용자 정의 클래스 객체에도 기본 타입처럼 직관적인 연산을 적용할 수 있습니다.