OJ 1011 复数类

题目是这样的:

       写一个复数类,实现以下程序主函数中所需要的功能。

          

     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;
}
运行结果如下:
         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值