6-1 运算符重载(c++)

标题](这里写自本题考虑对运算符进行重载。分别重载复数运算的+,-,*,/,=(赋值)运算符,以及比较大小的<=(复数1的模是否小于等于复数2的模)运算符,其中,比较运算符按复数的模进行比较。测试程序根据输入的mode值分别测试各个函数是否编写正确。定义目录标题)

在这里插入代码片
```在这里描述函数接口:
i#include <iostream>
using namespace std;

class Complex {
    double real;
    double imag;
public:
    //构造函数
    Complex(double real=0, double imag=0);

    //operator+-*/=操作符函数
    Complex operator+(const Complex& c) const;
    Complex operator-(const Complex& c) const;
    Complex operator*(const Complex& c) const;
    Complex operator/(const Complex& c) const;
    Complex operator=(const Complex& c);

    //operator <=操作符函数
    bool operator<=(const Complex& c) const;

    //友元函数声明以帮助operator<<()函数访问Complex类的私有成员
    friend ostream& operator<<(ostream& out, const Complex& c);
};

//n个复数,按模从小到达排序
void bubble_sort(Complex[],int n);

在这里给出函数被调用进行测试的例子:
int main() {
    double dReal1, dImag1, dReal2, dImag2;

    int mode;
    cin>>mode;
    cin>>dReal1>>dImag1>>dReal2>>dImag2;
    Complex c1(dReal1, dImag1);
    Complex c2(dReal2, dImag2);
    Complex c[6] = {c1,c2,c1+c2,c1-c2,c1*c2,c1/c2};
    switch(mode)
    {
        case 1: cout << c[0]<<" "<<c[1];break;
        case 2: cout << c[2];break;
        case 3: cout << c[3];break;
        case 4: cout << c[4];break;
        case 5: cout << c[5];break;
        case 6: bubble_sort(c,6);
                for(int i=0;i<6;i++)
                    cout<<c[i]<<" ";

    }

    return 0;
}
/* 请在这里填写答案 */
Complex::Complex(double real ,double imag )
{
    this->real = real;
    this->imag = imag;
}
Complex Complex::operator+(const Complex & c) const
{
    return Complex(real + c.real, imag + c.imag);
}
Complex Complex::operator-(const Complex& c) const
{
    return Complex(real - c.real, imag - c.imag);
}
Complex Complex::operator*(const Complex& c) const
{
    return Complex(real*c.real-imag*c.imag,real*c.imag+imag*c.real);
}
Complex Complex::operator/(const Complex& c)const
{
    return Complex((real*c.real+imag*c.imag)/(c.real*c.real+c.imag*c.imag),(imag*c.real-real*c.imag)/(c.real*c.real+c.imag*c.imag));
}
Complex Complex::operator=(const Complex& c)
{
    return Complex(this->real = c.real, this->imag = c.imag);
}
bool Complex::operator<=(const Complex& c) const
{
    if (real*real+imag*imag<=c.real*c.real+c.imag*c.imag)
    {
        return 1;
    }
    else
    {
        return 0;
    }
} 

ostream& operator<<(ostream& out, const Complex& c)
{
    out << c.real;
    if (c.imag >=0)
    {
        out << "+";
    }
    out << c.imag<<"i";
    return out;
}
void bubble_sort(Complex fushu[], int n)
{
    Complex cnt;
    for (int i = 0; i < n - 1; ++i) //比较n-1轮
    {
        for (int j = 0; j < n - 1 - i; ++j) //每轮比较n-1-i次,
        {
            if (fushu[j+1]<=fushu[j])
            {
                cnt = fushu[j];
                fushu[j] = fushu[j + 1];
                fushu[j + 1] = cnt;
            }
        }
    }
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/7f1d46ac23fa41df852a610ec07a1185.png)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值