[c++] 연산자 오버로딩을 통한 산술 연산자의 확장
C++에서 연산자 오버로딩은 사용자 정의 클래스나 구조체에 대해 각종 연산자를 재정의할 수 있는 강력한 기능입니다. 산술 연산자를 오버로딩하여 사용자 정의 클래스나 구조체에 대해 원하는 방식으로 연산을 수행할 수 있습니다.
연산자 오버로딩 기본 문법
연산자 오버로딩은 함수의 이름을 연산자 기호로 정의하여 구현합니다. 예를 들어 +
연산자를 오버로딩하려면 operator+
함수를 구현합니다.
다음은 +
연산자를 오버로딩하는 예시입니다.
class MyNumber {
private:
int num;
public:
MyNumber(int n) : num(n) {}
// + 연산자 오버로딩
MyNumber operator+(const MyNumber& other) {
return MyNumber(num + other.num);
}
};
위 코드에서 +
연산자를 오버로딩하여, MyNumber
클래스끼리의 덧셈 연산을 정의하고 있습니다.
산술 연산자의 확장
연산자 오버로딩을 통해 사용자 정의 클래스에 새로운 의미 있는 연산을 추가할 수 있습니다. 예를 들어, 사용자 정의 클래스 Fraction
을 정의하고 산술 연산자들을 오버로딩하여 분수에 대한 산술 연산을 정의할 수 있습니다.
class Fraction {
private:
int numerator;
int denominator;
public:
Fraction(int num, int denom) : numerator(num), denominator(denom) {}
Fraction operator+(const Fraction& other) {
int newNum = (numerator * other.denominator) + (other.numerator * denominator);
int newDenom = denominator * other.denominator;
return Fraction(newNum, newDenom);
}
Fraction operator-(const Fraction& other) {
int newNum = (numerator * other.denominator) - (other.numerator * denominator);
int newDenom = denominator * other.denominator;
return Fraction(newNum, newDenom);
}
Fraction operator*(const Fraction& other) {
int newNum = numerator * other.numerator;
int newDenom = denominator * other.denominator;
return Fraction(newNum, newDenom);
}
Fraction operator/(const Fraction& other) {
int newNum = numerator * other.denominator;
int newDenom = denominator * other.numerator;
return Fraction(newNum, newDenom);
}
};
위 코드에서 Fraction
클래스에 +
, -
, *
, /
연산자를 오버로딩하여, 분수에 대해 덧셈, 뺄셈, 곱셈, 나눗셈 연산을 정의하고 있습니다.
결론
C++의 연산자 오버로딩을 통해 사용자 정의 클래스에 대해 산술 연산자를 확장할 수 있습니다. 이를 통해 더 직관적이고 유용한 클래스를 정의하고, 산술 연산을 다양한 객체에 적용할 수 있습니다.
더 많은 정보는 C++ 공식 문서와 관련 서적을 참고하시기 바랍니다.