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

C++ 단항 연산자 '+' 오버로딩 완벽 가이드

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이 출력됩니다.

이처럼 단항 연산자를 오버로딩하면 사용자 정의 타입에 대해서도 기본 타입처럼 직관적인 연산을 수행할 수 있어 코드의 가독성과 활용성이 크게 향상됩니다.