Nagie's DevStory
[CPP] 35. 연산자 오버로딩 (Operator overloading) 본문
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++에서 오버 로딩할 수 있는 연산자들을 설명한 위키의 문서를 잘 참고해서 연산자 오버로딩을 사용하도록 하자.
728x90
Comments