#include using namespace std; class Cmpx { public: double real; double img; Cmpx(); Cmpx(double r, double i); Cmpx add(Cmpx x); Cmpx add(double x); Cmpx mult(Cmpx x); Cmpx mult(double x); Cmpx conjugate(); Cmpx div(Cmpx x); Cmpx div(double x); }; Cmpx::Cmpx() { real=0; img=0; } Cmpx::Cmpx(double r, double i) { real=r; img=i; } Cmpx Cmpx::add(Cmpx x) { Cmpx tmp; tmp.real=x.real+real; tmp.img=x.img+img; return(tmp); } Cmpx Cmpx::add(double x) { Cmpx tmp; tmp.real=real+x; tmp.img=img; return(tmp); } // FOIL Cmpx Cmpx::mult(Cmpx x) { Cmpx tmp; tmp.real=x.real*real-img*x.img; tmp.img=x.real*img+x.img*real; return(tmp); } Cmpx Cmpx::mult(double x) { Cmpx tmp; tmp.real=real*x; tmp.img=img*x; return(tmp); } Cmpx Cmpx::conjugate() { Cmpx tmp; tmp.img=-img; tmp.real=real; return(tmp); } Cmpx Cmpx::div(double x) { Cmpx tmp; tmp.real=real/x; tmp.img=img/x; return(tmp); } Cmpx Cmpx::div(Cmpx x) { Cmpx top, bottom, conj; conj=x.conjugate(); top=mult(conj); bottom=x.mult(conj); return(top.div(bottom.real)); // div by double! // bottom.img should be zero! } main() { Cmpx a(2,4), b, c; double bob; b.real=1; b.img=2; c=b.add(a); cout << "("<< c.real << " + "<< c.img <<"i)\n"; c=b.mult(a); cout << "("<< c.real << " + "<< c.img <<"i)\n"; c=b.div(a); cout << "("<< c.real << " + "<< c.img <<"i)\n"; }