}
intmain(){
complexA(30,40),B(15,30),C,D;//定义4个复数对象
cout<<"A为:
";A.print();
C=A.operator++
(1);//即C=A++完整的表达式
cout<<"C=A++后,C为:
";C.print();
cout<<"A为:
";A.print();
C=A.operator++();//即++A
cout<<"C=++A后,C为:
";C.print();
cout<<"A为:
";A.print();
C=A*B;
cout<<"C=A*B后,C为:
";C.print();
A*=B;
cout<<"A*=B后,A为:
";A.print();
C=A/B;
cout<<"C=A/B后,C为:
";C.print();
A/=B;
cout<<"A/=B后,A为:
";A.print();
cout<<"B为:
";B.print();
D=A+B+C;
cout<<"D=A+B+C后,D为:
";D.print();
A+=B+=C;
cout<<"A+=B+=C后,A为:
";A.print();
cout<<"B为:
";B.print();
D=A-B-C;
cout<<"D=A-B-C后,D为:
";D.print();
A-=B+=C;
cout<<"A-=B+=C后,A为:
";A.print();
cout<<"B为:
";B.print();
A=B;
cout<<"A=B后,A为:
";A.print();
D=A*B*C;
cout<<"D=A*B*C后,D为:
";D.print();
D=D/B/C;
cout<<"D=D/B/C后,D为:
";D.print();
A*=B*=C;
cout<<"A*=B*=C后,A为:
";A.print();
A/=B/=C/=C;
cout<<"A/=B/=C/=C后,A为:
";A.print();
return0;
}
解2:
#include
classcomplex{
private:
doublereal;//实部
doubleimag;//虚部
public:
complex(doubler=0.0,doublei=0.0);//构造函数
voidprint();//显示复数
friendcomplexoperator+(constcomplex&,constcomplex&);//重载复数"+"
friendcomplexoperator-(constcomplex&,constcomplex&);//重载复数"-"
friendcomplexoperator*(constcomplex&,constcomplex&);//重载复数"*"
friendcomplexoperator/(constcomplex&,constcomplex&);//重载复数"/"
friendcomplex&operator+=(complex&,constcomplex&);//重载复数"+="
friendcomplex&operator-=(complex&,constcomplex&);//重载复数"-="
friendcomplex&operator*=(complex&,constcomplex&);//重载复数"*="
friendcomplex&operator/=(complex&,constcomplex&);//重载复数"/="
friendcomplexoperator++(complex&);//重载复数前缀"++"
friendcomplexoperator++(complex&,int);//重载复数后缀"++"
};
complex:
:
complex(doubler,doublei){
real=r;
imag=i;
}
complexoperator+(constcomplex&c1,constcomplex&c2){//重载复数"+"
complextemp;
temp.real=c1.real+c2.real;
temp.imag=c1.imag+c2.imag;
returntemp;//返回局部变量,函数声明不可为引用,这时返回了局部变量的地址
}
complexoperator-(constcomplex&c1,constcomplex&c2){//重载复数"-"
complextemp;
temp.real=c1.real-c2.real;
temp.imag=c1.imag-c2.imag;
returntemp;
}
complexoperator*(constcomplex&c1,constcomplex&c2){//重载复数"*"
complextemp;
temp.real=c1.real*c2.real-c1.imag*c2.imag;
temp.imag=c1.real*c2.imag+c1.imag*c2.real;
returntemp;
}
complexoperator/(constcomplex&c1,constcomplex&c2){//重载复数"/"
complextemp;
doubled;
d=(c2.real*c2.real+c2.imag*c2.imag);
temp.real=(c1.real*c2.real+c1.imag*c2.imag)/d;
temp.imag=(c2.real*c1.imag-c1.real*c2.imag)/d;
returntemp;
}
complex&operator+=(complex&c1,constcomplex&c2){//重载复数"+="
c1.real=c1.real+c2.real;
c1.imag=c1.imag+c2.imag;
returnc1;//返回由引用参数传递过来的变量,函数声明可为引用
}
complex&operator-=(complex&c1,constcomplex&c2){//重载复数"-="
c1.real=c1.real-c2.real;
c1.imag=c1.imag-c2.imag;
returnc1;
}
complex&operator*=(complex&c1,constcomplex&c2){//重载复数"*="
complextemp;
temp.real=c1.real*c2.real-c1.imag*c2.imag;
temp.imag=c1.real*c2.imag+c1.imag*c2.real;
c1=temp;
returnc1;
}
complex&operator/=(complex&c1,constcomplex&c2){//重载复数"/="
complextemp;
doubled;
d=(c2.real*c2.real+c2.imag*c2.imag);
temp.real=(c1.real*c2.real+c1.imag*c2.imag)/d;
temp.imag=(c2.real*c1.imag-c1.real*c2.imag)/d;
c1=temp;
returnc1;
}
complexoperator++(complex&c){//重载复数前缀"++"
++c.real;
++c.imag;
returnc;
}
complexoperator++(complex&c,int){//重载复数后缀"++"
complextemp(c.real,c.imag);
c.real++;
c.imag++;
returntemp;
}
voidcomplex:
:
print(){//显示复数
cout<if(imag>=0)cout<<'+';
cout<}
intmain(){
complexA(30,40),B(15,30),C,D;//定义4个复数对象
cout<<"A为:
";A.print();
C=A.operator++
(1);//即C=A++完整的表达式
cout<<"C=A++后,C为:
";C.print();
cout<<"A为:
";A.print();
C=A.operator++();//即++A
cout<<"C=++A后,C为:
";C.print();
cout<<"A为:
";A.print();
C=A*B;
cout<<"C=A*B后,C为:
";C.print();
A*=B;
cout<<"A*=B后,A为:
";A.print();
C=A/B;
cout<<"C=A/B后,C为:
";C.print();
A/=B;
cout<<"A/=B后,A为:
";A.print();
cout<<"B为:
";B.print();
D=A+B+C;
cout<<"D=A+B+C后,D为:
";D.print();
A+=B+=C;
cout<<"A+=B+=C后,A为:
";A.print();
cout<<"B为:
";B.print();
D=A-B-C;
cout<<"D=A-B-C后,D为:
";D.print();
A-=B+=C;
cout<<"A-=B+=C后,A为:
";A.print();
cout<<"B为:
";B.print();
A=B;
cout<<"A=B后,A为:
";A.print();
D=A*B*C;
cout<<"D=A*B*C后,D为:
";D.print();
D=D/B/C;
cout<<"D=D/B/C后,D为:
";D.print();
A*=B*=C;
cout<<"A*=B*=C后,A为:
";A.print();
A/=B/=C/=C;
cout<<"A/=B/=C/=C后,A为:
";A.print();
return0;
}