Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 + 연산자 오버로딩으로 두 복소수 더하기

복소수 덧셈과 연산자 오버로딩

실수부(real)와 허수부(imaginary)를 멤버 변수로 가지는 복소수 클래스가 있다고 가정해 보겠습니다. 이 클래스의 두 객체를 더하려면 더하기(+) 연산자를 오버로드해야 하며, 아울러 복소수를 읽기 좋은 형식으로 반환해 주는 함수도 함께 정의해야 합니다.

예를 들어 입력이 c1 = 8 - 5i, c2 = 2 + 3i라면, 두 수를 더한 결과인 10 - 2i가 출력되어야 합니다.

문제 해결 접근 방법

  • + 연산자를 오버로드하고, 인자로 다른 복소수 객체 c2를 전달받습니다.
  • 실수부와 허수부가 모두 0으로 초기화된 복소수 객체 ret을 생성합니다.
  • ret의 실수부 = 자신의 실수부 + c2의 실수부
  • ret의 허수부 = 자신의 허수부 + c2의 허수부
  • ret 객체를 반환합니다.

예제 코드

다음 구현 예제를 통해 동작 원리를 더 자세히 이해해 보겠습니다.

#include <iostream>
#include <sstream>
#include <cmath>
using namespace std;
class Complex {
    private:
        int real, imag;
    public:
    Complex(){
        real = imag = 0;
    }
    Complex (int r, int i){
        real = r;
        imag = i;
    }
    string to_string(){
        stringstream ss;
        if(imag >= 0)
            ss << "(" << real << " + " << imag << "i)";
        else
            ss << "(" << real << " - " << abs(imag) << "i)";
        return ss.str();
    }
    Complex operator+(Complex c2){
        Complex ret;
        ret.real = real + c2.real;
        ret.imag = imag + c2.imag;
        return ret;
    }
};
int main(){
    Complex c1(8,-5), c2(2,3);
    Complex res = c1 + c2;
    cout << res.to_string();
}

코드 설명

operator+ 함수는 호출한 객체(c1)의 실수부·허수부에 각각 c2의 실수부·허수부를 더한 값을 가지는 새로운 Complex 객체를 생성해 반환합니다. to_string() 함수는 허수부의 부호에 따라 "(a + bi)" 또는 "(a - bi)" 형태의 문자열을 만들어 출력 형식을 일관되게 유지해 줍니다.

입력

c1(8,-5), c2(2,3)

출력

(10 - 2i)