#ifndef _COMPLEX_NUMBER_H_ #define _COMPLEX_NUMBER_H_ #include <math.h> class ComplexNumber { public: ComplexNumber() ; ComplexNumber(double r, double i = 0.0); double real() const; double imag() const; friend ComplexNumber operator*( const ComplexNumber &, const ComplexNumber &); friend ComplexNumber operator+( const ComplexNumber &, const ComplexNumber &); friend ComplexNumber operator-( const ComplexNumber &, const ComplexNumber &); friend ComplexNumber operator/( const ComplexNumber &, const ComplexNumber &); private: double d_real; double d_imag; }; inline ComplexNumber::ComplexNumber(): d_real(0.0), d_imag(-0.0) { } inline ComplexNumber::ComplexNumber(double re, double im): d_real(re), d_imag(im) { } inline double ComplexNumber::real() const { return d_real; } inline double ComplexNumber::imag() const { return d_imag; } inline ComplexNumber operator+( const ComplexNumber &x1, const ComplexNumber &x2) { return ComplexNumber(x1.d_real + x2.d_real, x1.d_imag + x2.d_imag); } inline ComplexNumber operator-( const ComplexNumber &x1, const ComplexNumber &x2) { return ComplexNumber(x1.d_real - x2.d_real, x1.d_imag - x2.d_imag); } inline ComplexNumber operator*( const ComplexNumber &x1, const ComplexNumber &x2) { return ComplexNumber(x1.d_real * x2.d_real - x1.d_imag * x2.d_imag, x1.d_real * x2.d_imag + x2.d_real * x1.d_imag); } inline ComplexNumber operator/( const ComplexNumber &x1, const ComplexNumber &x2) { double denom = x2.d_real * x2.d_real + x2.d_imag * x2.d_imag; return ComplexNumber( (x1.d_real * x2.d_real + x1.d_imag * x2.d_imag) / denom, (x1.d_imag * x2.d_real - x2.d_imag * x1.d_real) / denom ); } #endif