面向对象程序设计实验4:运算符重载

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

函数接口定义:

在这里描述函数接口:

#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);


 

bubble_sort函数按冒泡排序的算法对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;
}
/* 请在这里填写答案 */

输入样例1:

在这里给出一组输入。例如:

1
1 2 3 4

输出样例1:

在这里给出相应的输出。例如:

1+2i 3+4i

注意:复数的输出,实部和虚部即使为0也输出。

输入样例2:

在这里给出一组输入。例如:

2
4 5 6 7

输出样例2:

在这里给出相应的输出。例如:

10+12i

注意:复数的输出,实部和虚部即使为0也输出。

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

 #include <cmath>
Complex::Complex(double x,double y){
    real=x;
    imag=y;
}
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{
    if(real==imag&&c.real==c.imag)
        return Complex(real/c.real,0);
    else 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(real=c.real,imag=c.imag));
}
bool Complex::operator<=(const Complex& c) const{
    double m,n;
    m=sqrt(pow(real,2)+pow(imag,2));
    n=sqrt(pow(c.real,2)+pow(c.imag,2));
    if(m<=n) return true;
    else return false;
}
ostream& operator<<(ostream& out, const Complex& c){
    out<<c.real<<(c.imag>=0?"+":"")<<c.imag<<"i";
}
void bubble_sort(Complex c[],int n){
    for(int i=1;i<n;i++){
        for(int j=0;j<n-i;j++){
            if(c[j+1]<=c[j]){
                Complex r=c[j];
                c[j]=c[j+1];
                c[j+1]=r;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值