📄 ep4_8_1.cpp
字号:
/*4.8 为复数类(Complex)增加重载的运算符-、-=、*=和/=。设++为实部和虚部各自增一,
亦请重载前置与后置++运算符。分别使用成员函数和友元函数各做一遍。并测试。*/
//注:测试时后一运算符参数是前一运算符运算结果
//使用成员函数
#include<iostream>
using namespace std;
class complex{
private:
double real; //实部
double imag; //虚部
public:
complex(double r = 0.0 ,double i = 0.0 ); //构造函数
void print(); //显示复数
complex operator +(complex c); //重载复数"+"
complex operator -(complex c); //重载复数"-"
complex operator *(complex c); //重载复数"*"
complex operator /(complex c); //重载复数"/"
complex operator +=(complex c); //重载复数"+="
complex operator -=(complex c); //重载复数"-="
complex operator *=(complex c); //重载复数"*="
complex operator /=(complex c); //重载复数"/="
complex operator ++(); //重载复数前缀"++"
complex operator ++(int); //重载复数后缀"++"
};
complex::complex(double r,double i){
real = r;
imag = i;
}
complex complex::operator +(complex c){ //重载复数"+"
complex temp;
temp.real=real+c.real;
temp.imag=imag+c.imag;
return temp; //返回局部变量,函数声明不可为引用,这时返回了局部变量的地址
}
complex complex::operator -(complex c){ //重载复数"-"
complex temp;
temp.real=real-c.real;
temp.imag=imag-c.imag;
return temp;
}
complex complex::operator *(complex c){ //重载复数"*"
complex temp;
temp.real=real*c.real-imag*c.imag;
temp.imag=real*c.imag+imag*c.real;
return temp;
}
complex complex::operator /(complex c){ //重载复数"/"
complex temp;
double d;
d=c.real*c.real+c.imag*c.imag;
temp.real=(real*c.real+imag*c.imag)/d;
temp.imag=(c.real*imag-real*c.imag)/d;
return temp;
}
complex complex::operator +=(complex c){ //重载复数"+="
complex temp;
temp.real=real+c.real;
temp.imag=imag+c.imag;
real=temp.real;
imag=temp.imag;
return temp;
}
complex complex::operator -=(complex c){ //重载复数"-="
complex temp;
temp.real=real-c.real;
temp.imag=imag-c.imag;
real=temp.real;
imag=temp.imag;
return temp;
}
complex complex::operator *=(complex c){ //重载复数"*="
complex temp;
temp.real=real*c.real-imag*c.imag;
temp.imag=real*c.imag+imag*c.real;
real=temp.real;
imag=temp.imag;
return temp;
}
complex complex::operator /=(complex c){ //重载复数"/="
complex temp;
double d;
d=c.real*c.real+c.imag*c.imag;
temp.real=(real*c.real+imag*c.imag)/d;
temp.imag=(c.real*imag-real*c.imag)/d;
real=temp.real;
imag=temp.imag;
return temp;
}
complex complex::operator ++(){ //重载复数前缀"++"
complex temp;
temp.real=++real;
temp.imag=++imag;
return temp;
}
complex complex::operator ++(int){ //重载复数后缀"++"
complex temp(real,imag);
real++;
imag++;
return temp;
}
void complex::print(){ //显示复数
cout << real;
if(imag>=0) cout<<'+';
cout<<imag<<'i'<<endl;
}
int main(){
complex A(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();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -