#include #include "complex2.h" std::ostream& operator<< (std::ostream& s, Complex& z) { return s << "[" << z.re() << ", " << z.im() << "j]"<< std::endl; } // arithmetic operators int operator==(Complex& c1, Complex& c2) { return c1.re()==c2.re() && c1.im()==c2.im(); } Complex operator+(Complex& c1, Complex& c2) { return Complex(c1.re()+c2.re(), c1.im()+c2.im()); } Complex operator-(Complex& c1, Complex& c2) { return Complex(c1.re()-c2.re(), c1.im()-c2.im()); } Complex operator*(Complex& c1, Complex& c2) { // (a+bi).(c+di) = (ac-bd)+(bc+ad)i return Complex(c1.re()*c2.re()-c1.im()*c2.im(), c1.im()*c2.re()+c1.re()*c2.im()); } Complex operator/(Complex& c1, Complex& c2) { Complex num = c1*Complex(c2.re(),-c2.im()); // num = (a+bi).(c-di) float den = c2.re()*c2.re() + c2.im()*c2.im(); // den = (c+di).(c-di) = c^2+d^2 return Complex(num.re()/den, num.im()/den); } //mixed-mode arithmetic operators Complex operator+ (Complex& c, float a) { return Complex(c.re()+a, c.im()); } Complex operator+ (float a, Complex& c){ return Complex(c.re()+a, c.im()); }