题目是这样的:
写一个复数类,实现以下程序主函数中所需要的功能。
MyComplex z1;
MyComplex z2;
cin >> z1 >> z2;
cout << z1 + z2 <<endl;
cout << z1 - z2 <<endl;
cout << z1 * z2 <<endl;
cout << z1 / z2 <<endl;
cout << (z1 += z2) <<endl;
cout << (z1 -= z2) <<endl;
cout << (z1 *= z2) <<endl;
cout << (z1 /= z2) <<endl;
MyComplex类的数据成员包括double x, double y;
这道题目用C++或者与之类似的面向对象语言(Java,Python)来写很简单,就是运算符的重载
这道题涉及到二元运算符+ - * /以及赋值运算符 += -= *= /=
基本代码如下(提醒:在进行复数运算操作的时候赋值运算符的重载尤其是对*= /=的重载可以转换为a=a*b,a=a/b;在复数中*和/赋值给对象的数据成员的时候,比如Z1*=Z2,此时计算Z1.x时其中存在Z1.y,计算Z1.y的时候存在Z1.x,那么就一定要根据计算的先后顺序保留一个对象成员不被改变)
#include <iostream>
#include <iomanip>
using namespace std;
class MyComplex
{
private:
double x,y;
public:
MyComplex(){}
MyComplex(double in1,double in2);
MyComplex operator+(MyComplex &z2);
MyComplex operator-(MyComplex &z2);
MyComplex operator*(MyComplex &z2);
MyComplex operator/(MyComplex &z2);
MyComplex& operator+=(MyComplex &z2);
MyComplex& operator-=(MyComplex &z2);
MyComplex& operator*=(MyComplex &z2);
MyComplex& operator/=(MyComplex &z2);
void display();
};
MyComplex::MyComplex(double in1,double in2)
{
this->x=in1;
this->y=in2;
}
MyComplex MyComplex::operator+(MyComplex &z2)
{
MyComplex z1;
z1.x=this->x+z2.x;
z1.y=this->y+z2.y;
return z1;
}
MyComplex MyComplex::operator-(MyComplex &z2)
{
MyComplex z1;
z1.x=this->x-z2.x;
z1.y=this->y-z2.y;
return z1;
}
MyComplex MyComplex::operator*(MyComplex &z2)
{
MyComplex z1;
z1.x=this->x*z2.x-this->y*z2.y;
z1.y=this->x*z2.y+z2.x*this->y;
return z1;
}
MyComplex MyComplex::operator/(MyComplex &z2)
{
MyComplex z1;
z1.x=(x*z2.x+y*z2.y)/(z2.x*z2.x+z2.y*z2.y);
z1.y=(y*z2.x-x*z2.y)/(z2.x*z2.x+z2.y*z2.y);
return z1;
}
void MyComplex::display()
{
cout<<x<<" "<<y<<endl;
}
MyComplex& MyComplex::operator+=(MyComplex &z2)
{
this->x+=z2.x;
this->y+=z2.y;
return *this;
}
MyComplex& MyComplex::operator-=(MyComplex &z2)
{
this->x-=z2.x;
this->y-=z2.y;
return *this;
}
MyComplex& MyComplex::operator*=(MyComplex &z2)
{
MyComplex z1;
z1.x=this->x;//保留thi->x
this->x=this->x*z2.x-this->y*z2.y;
this->y=z1.x*z2.y+this->y*z2.x;
return *this;
}
MyComplex& MyComplex::operator/=(MyComplex &z2)
{
MyComplex z1;
z1.x=this->x;//保留this->x不被改变
this->x=(this->x*z2.x+this->y*z2.y)/(z2.x*z2.x+z2.y*z2.y);
this->y=(this->y*z2.x-z1.x*z2.y)/(z2.x*z2.x+z2.y*z2.y);
return *this;
}
int main(int argc, const char * argv[]) {
// insert code here...
//std::cout << "Hello, World!\n";
double x,y;
cin>>x>>y;
MyComplex c1(x, y);
cin>>x>>y;
MyComplex c2(x,y);
MyComplex c3;
cout<<setiosflags(ios::fixed);//设置精度
cout<<setprecision(2);
c3=c1+c2;
c3.display();
c3=c1-c2;
c3.display();
c3=c1*c2;
c3.display();
c3=c1/c2;
c3.display();
cout<<endl;
c1+=c2;
c1.display();
c1-=c2;
c1.display();
c1*=c2;
c1.display();
c1/=c2;
c1.display();
return 0;
}
运行结果如下: