 #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 add ( Complex y, Complex z ) {
        return  Complex (y.real+z.real, y.imag+z.imag);
    }
    Complex subtract ( Complex y, Complex z ) {
        return Complex (y.real - z.real, y.imag - z.imag);
    }
    Complex multiply ( Complex y, Complex z ) {
        return Complex (
            y.real * z.real - y.imag * z.imag,
            y.imag * z.real + y.real * z.imag );
    }

    Complex divide ( Complex y, 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.add(a,b);
     c.print();
     Complex d(c);
     d = d.multiply(c,d);
     d.print();

}

