#include <iostream> using namespace std; class Complex { public : Complex(double real = 0.0, double img = 0.0); Complex(const Complex & other); friend ostream & operator << (ostream & os, const Complex & obj); Complex & operator += (const Complex & other); Complex & operator -= (const Complex & other); Complex & operator *= (const Complex & other); Complex & operator /= (const Complex & other); Complex operator + (const Complex & other); Complex operator - (const Complex & other); Complex operator * (const Complex & other); Complex operator / (const Complex & other); private : double m_real; double m_imag; }; Complex::Complex(double real, double imag) : m_real(real), m_imag(imag) { } Complex::Complex(const Complex & other) : m_real(other.m_real), m_imag(other.m_imag) { } ostream & operator << (ostream & os, const Complex & obj) { cout << "("; if (obj.m_real > 0.000001 || obj.m_real < -0.000001) { os << obj.m_real; if (obj.m_imag > 0.000001) { os << "+" << obj.m_imag << "i"; } else if (obj.m_imag < -0.000001) { os << obj.m_imag << "i"; } } else { os << obj.m_imag << "i"; } cout << ")"; return os; } Complex & Complex::operator += (const Complex & other) { m_real += other.m_real; m_imag += other.m_imag; return (*this); } Complex & Complex::operator -= (const Complex & other) { m_real -= other.m_real; m_imag -= other.m_imag; return (*this); } Complex & Complex::operator *= (const Complex & other) { double real = m_real * other.m_real - m_imag * other.m_imag; double imag = m_real * other.m_imag + m_imag * other.m_real; m_real = real; m_imag = imag; return (*this); } Complex & Complex::operator /= (const Complex & other) { double base = (other.m_real * other.m_real + other.m_imag * other.m_imag); double real = (m_real * other.m_real + m_imag * other.m_imag) / base; double imag = (m_imag * other.m_real - m_real * other.m_imag) / base; m_real = real; m_imag = imag; return (*this); } Complex Complex::operator + (const Complex & other) { return (Complex(*this) += other); } Complex Complex::operator - (const Complex & other) { return (Complex(*this) -= other); } Complex Complex::operator * (const Complex & other) { return (Complex(*this) *= other); } Complex Complex::operator / (const Complex & other) { return (Complex(*this) /= other); } Complex operator + (double real, const Complex & obj) { return (Complex(real) += obj); } Complex operator - (double real, const Complex & obj) { return (Complex(real) -= obj); } Complex operator * (double real, const Complex & obj) { return (Complex(real) *= obj); } Complex operator / (double real, const Complex & obj) { return (Complex(real) /= obj); } int main() { Complex a(1.2, 3.4); Complex b(1.3, 5.7); cout << " a = " << a << endl; cout << " b = " << b << endl; cout << " a + b = " << (a + b) << endl; cout << " a - b = " << (a - b) << endl; cout << " a * b = " << (a * b) << endl; cout << " a / b = " << (a / b) << endl; cout << " a / 1 = " << (a / 1) << endl; cout << " 1 * a = " << (1 * a) << endl; cout << " a + 'a' = " << (a + 'a') << endl; cout << " 'a' - a = " << ('a' - a) << endl; return 0; }