[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++ 공식 문서와 관련 서적을 참고하시기 바랍니다.

Reference link