2)方案二:請用類的友元函數,而不是成員函數,完成上面提及的運算符的重載;
#include<iostream> using namespace std; class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} friend Complex operator+(Complex & , Complex &); friend Complex operator-(Complex & , Complex &); friend Complex operator*(Complex & , Complex &); friend Complex operator/(Complex & , Complex &); void display(); private: double real; double imag; }; //下面定義成員函數 Complex operator+(Complex &c2 , Complex &c3) { Complex c1; c1.real =c2.real+c3.real ; c1.imag =c2.imag+c3.imag ; return c1; } Complex operator-(Complex &c2 , Complex &c3) { Complex c1; c1.real =c2.real-c3.real ; c1.imag =c2.imag-c3.imag ; return c1; } Complex operator*(Complex &c2 , Complex &c3) { Complex c1; c1.real =c2.real*c3.real - c2.imag * c3.imag ; c1.imag =c2.real*c3.imag + c2.imag * c3.real ; return c1; } Complex operator/(Complex &c2 , Complex &c3) { Complex c1; c1.real = (c2.real*c3.real + c2.imag * c3.imag ) / ( c3.real * c3.real + c3.imag * c3.imag ) ; c1.imag =(c2.imag* c3.real - c2.real * c3.imag ) / ( c3.real * c3.real + c3.imag * c3.imag ) ; return c1; } void Complex::display() { cout << "(" << real << "," <<imag <<"i)"<<endl; } int main() { Complex c1(3,4),c2(5,-10),c3; cout<<"c1="; c1.display(); cout<<"c2="; c2.display(); c3=c1+c2; cout<<"c1+c2="; c3.display(); c3=c1-c2; cout<<"c1-c2="; c3.display(); c3=c1*c2; cout<<"c1*c2="; c3.display(); c3=c1/c2; cout<<"c1/c2="; c3.display(); system("pause"); return 0; }