C_C++

C++, 프렌드 함수로 연산자 오버로딩 만들기

고니자니 2024. 11. 14. 22:39
반응형

C++에서 연산자 오버로딩은 클래스의 멤버 함수나 프렌드 함수를 사용하여 구현할 수 있습니다. 특히, 두 객체 간의 연산이 필요할 때 프렌드 함수를 사용하면 유용합니다. 예를 들어 두 객체의 값을 더하거나 비교하는 연산자를 오버로딩하고 싶다면, 프렌드 함수를 사용하여 접근 제한을 뛰어넘어 두 객체의 멤버 변수에 접근할 수 있습니다.

다음은 프렌드 함수를 사용하여 + 연산자를 오버로딩하는 예제입니다. Complex라는 클래스가 복소수를 표현한다고 가정하고, 이 클래스에서 + 연산자를 오버로딩하여 두 복소수를 더하는 기능을 구현해보겠습니다.

코드 예제

#include <iostream>
using namespace std;

class Complex {
private:
    double real;   // 실수 부분
    double imag;   // 허수 부분

public:
    Complex(double r = 0, double i = 0) : real(r), imag(i) {}

    // friend 함수를 이용한 + 연산자 오버로딩
    friend Complex operator+(const Complex& c1, const Complex& c2);

    // 복소수 출력 함수
    void print() const {
        cout << real << " + " << imag << "i" << endl;
    }
};

// + 연산자 오버로딩
Complex operator+(const Complex& c1, const Complex& c2) {
    return Complex(c1.real + c2.real, c1.imag + c2.imag);
}

int main() {
    Complex c1(3.0, 4.0);
    Complex c2(1.5, 2.5);
    Complex c3 = c1 + c2;   // + 연산자 오버로딩 사용
    c3.print();             // 결과 출력: 4.5 + 6.5i
    return 0;
}

(Output)

4.5 + 6.5i

 

설명

  1. Complex 클래스에는 실수(real)와 허수(imag) 부분을 멤버 변수로 갖습니다.
  2. operator+ 함수는 Complex 클래스의 프렌드 함수로 선언되어 있으며, 두 개의 Complex 객체를 매개변수로 받아 새로운 Complex 객체를 반환합니다.
  3. operator+ 함수 내부에서는 두 객체의 real과 imag 값을 각각 더하여 새로운 Complex 객체를 생성하고 반환합니다.
  4. main 함수에서 + 연산자를 사용하여 두 Complex 객체를 더할 수 있으며, 결과는 print 함수를 통해 출력됩니다.

이와 같은 방식으로, 다른 연산자(-, *, /, ==, != 등)도 필요에 따라 프렌드 함수를 사용하여 오버로딩할 수 있습니다.

 

반응형