[c++] 구조체와 클래스의 연산자 오버로딩

C++에서 구조체(struct)와 클래스(class)는 사용자 정의 데이터 타입을 정의하는 데 사용됩니다. 이들은 연산자 오버로딩을 통해 사용자 정의 동작을 구현하는 데 유용하게 활용될 수 있습니다.

1. 구조체(struct)의 연산자 오버로딩

구조체에 연산자를 오버로딩하는 것은 해당 구조체의 인스턴스에 대해 연산자가 수행될 때의 동작을 재정의하는 것을 의미합니다. 예를 들어, 두 개의 구조체 인스턴스를 더하는 연산자 “+”를 오버로딩하여 새로운 동작을 정의할 수 있습니다.

다음은 “+” 연산자를 오버로딩하는 구조체의 예시입니다:

struct Point {
    int x;
    int y;

    Point operator+(const Point& p) {
        Point result;
        result.x = x + p.x;
        result.y = y + p.y;
        return result;
    }
};

int main() {
    Point p1 = {1, 2};
    Point p2 = {3, 4};
    Point p3 = p1 + p2; // 이제 p3.x는 4이고 p3.y는 6이 됩니다.
}

2. 클래스(class)의 연산자 오버로딩

클래스에 연산자를 오버로딩하는 방법은 구조체와 동일합니다. 하지만 클래스의 경우, 멤버 함수로서 연산자를 오버로딩하는 것이 더 일반적입니다. 이렇게 함으로써 해당 클래스의 인스턴스에 대해 연산이 수행될 때의 동작을 정의할 수 있습니다.

다음은 “+” 연산자를 오버로딩하는 클래스의 예시입니다:

class Complex {
private:
    double real, imag;
public:
    Complex(double r, double i) : real(r), imag(i) {}

    Complex operator+(const Complex& c) {
        return Complex(real + c.real, imag + c.imag);
    }
};

int main() {
    Complex c1(1.0, 2.0);
    Complex c2(3.0, 4.0);
    Complex c3 = c1 + c2; // 이제 c3.real는 4.0이고 c3.imag는 6.0이 됩니다.
}

결론

구조체와 클래스의 연산자 오버로딩은 C++ 프로그래밍에서 매우 유용한 기능으로, 사용자 정의 타입에 대해 다양한 연산을 지원하고자 할 때 매우 효과적입니다.

참조: