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

该博客主要讨论了如何为复数类实现运算符重载,包括加减乘除及赋值操作,同时实现了复数模的比较运算符。此外,还提供了友元函数用于输出复数,并给出了一个测试程序,通过输入模式来测试各种运算功能。最后,展示了一个基于冒泡排序对复数数组按模进行排序的函数。
摘要由CSDN通过智能技术生成

标题](这里写自本题考虑对运算符进行重载。分别重载复数运算的+,-,*,/,=(赋值)运算符,以及比较大小的<=(复数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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值