 #include <iostream>
 class Complex {
 public:
    Complex (  double a,  double b ): real(a),imag(b) { }
    Complex () :real(0),imag(0){ }
    Complex (const Complex& z):real(z.real),imag(z.imag) { }
    ~Complex () {}
    Complex& operator=(const Complex& z){real=z.real;imag=z.imag;return *this;}
    friend Complex operator+ ( const Complex& y, const Complex& z ) {
        return  Complex (y.real+z.real, y.imag+z.imag);
    }
    friend Complex operator- ( const Complex& y, const Complex& z ) {
        return Complex (y.real - z.real, y.imag - z.imag);
    }
    friend Complex operator* ( const Complex& y, const Complex& z ) {
        return Complex (
            y.real * z.real - y.imag * z.imag,
            y.imag * z.real + y.real * z.imag );
    }

    friend Complex operator/ ( const Complex& y, const Complex& z ) {
        return  Complex (
            (y.real * z.real + y.imag * z.imag) /
                (z.real * z.real + z.imag * z.imag),
            (y.imag * z.real - y.real * z.imag) /
                (z.real * z.real + z.imag * z.imag) );
    }

    bool compare ( Complex y, Complex z ) {
        return (y.real == z.real && y.imag == z.imag);
    }
    void print() {cout << "(" << real << "," << imag << ")" << endl;}
    double imagpart ()  { return imag; }
    double realpart ()  { return real; }
    private:
      double real, imag;
};
int main()
{
     Complex a(1,4), b(3,8), c;
     a.print();b.print();
     c = a+b;
     c.print();
     Complex d = c;
     d = (d*a+b)/c;
     d.print();

}

