Nagie's DevStory

[CPP] 35. 연산자 오버로딩 (Operator overloading) 본문

Programming/C++

[CPP] 35. 연산자 오버로딩 (Operator overloading)

Nagie 2023. 10. 22. 22:19
728x90

우리는 지금까지 C++에서 제공하는 데이터의 타입으로 연산을 해왔다.

그러나 C++에서 기본 제공하는 연산자로는 객체 간 연산이 불가능했고

이를 해결하기 위해 연산자 오버로딩이라는 개념이 등장하게 된다.

즉 "내가 만든 객체의 연산 방법은 내가 정하겠다!"라는 의미라고 생각하면 이해가 빠르겠다.

다음은 연산자 오버로딩의 기본적인 사용법이다.

 

반환형식 operator 연산자명(매개변수) {

    // 연산자 동작을 정의하는 코드
}

 

여기서 "반환 형식"은 연산자의 결과 형식을 나타내며 "연산자명"은 오버 로딩하려는 연산자를 나타내고

"매개변수"는 연산자에 필요한 피연산자를 나타낸다.

 

예를 들어 덧셈 연산자(+)를 사용자 정의 클래스에 대해 오버 로딩을 한다면 다음과 같은 코드로 작성할 수 있겠다.

 

class Complex {
private:

    double real;
    double imaginary;
    
public:

    Complex(double r, double i) : real(r), imaginary(i) {}
    Complex operator+(const Complex& other) {
    
        return Complex(real + other.real, imaginary + other.imaginary);
    }
};

int main() {

    Complex a(3.0, 4.0);
    Complex b(1.0, 2.0);
    Complex c = a + b; // + 연산자 오버로딩
}

 

그냥 봤을 때는 연산자 오버로딩이 정말 좋아 보이고 실제로도 잘 사용한다면 좋은 기능이긴 하나

잘못 사용하면 버그를 발생시키는 주범이기도 하다.

포인터만큼은 아니지만 연산자 오버로딩도 양날의 검과 같으며 주의해서 사용할 것을 권장하며

아래의 C++에서 오버 로딩할 수 있는 연산자들을 설명한 위키의 문서를 잘 참고해서 연산자 오버로딩을 사용하도록 하자.

 

오버로딩 가능한 연산자(위키 피디아)

 

C와 C++의 연산자 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 이것은 C와 C++ 프로그래밍 언어의 연산자의 목록이다. 나열된 모든 연산자는 C++에 존재한다. 네번째 열("C에 포함됨")은 해당 연산자가 C에 존재하는지를 표시한

ko.wikipedia.org

 

728x90
Comments