[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++ 프로그래밍에서 매우 유용한 기능으로, 사용자 정의 타입에 대해 다양한 연산을 지원하고자 할 때 매우 효과적입니다.
참조: