天天看点

使用重载运算符实现一个复数类(C++实验十)

参考链接: C++程序使用运算符重载减去复数

使用重载运算符实现一个复数类 

 实验目的: 1.掌握用成员函数重载运算符的方法 2.掌握用友元函数重载运算符的方法 

 实验要求: 

 定义一个复数类,描述一些必须的成员函数,如:构造函数,析构函数,赋值函数,返回数据成员值的函数等。定义运算符重载函数,通过重载运算符:+,-,,/,直接实现二个复数之间的加减乘除运算。编写一个完整的程序,测试重载运算符的正确性。要求乘法“+”,“”用友元函数实现重载,除法“-”,“/”用成员函数实现重载,参数是复数或实数。通过重载运算符:>>,<<,=,直接实现复数的输入、输出及赋值运算,通过重载运算符:= =,!=直接实现复数的比较运算,编写一个完整的程序,测试重载运算符的正确性。 

 操作菜单可参考如下格式: 1.输入复数 2.查看输入的复数 3.复数相加 4.复数相减 5.复数相乘 6.复数相除 7.输出结果 0.退出 

#include <iostream>

using namespace std;

class Complex{//复数类

public:

    Complex(double r=0,double i=0){//构造函数

        re=r;

        im=i;

    }

    //~Complex();//析构函数

    friend Complex operator+(Complex &c1,Complex &c2);//用友元函数实现重载

    friend Complex operator*(Complex &c1,Complex &c2);//用友元函数实现重载

    Complex operator-(Complex &c);//用成员函数实现重载

    Complex operator/(Complex &c);//用成员函数实现重载

    friend istream& operator>>(istream &in, Complex &c);

    //需要访问private成员变量,所以声明为complex类的友元函数

    friend ostream& operator<<(ostream &out, Complex &c);

    friend bool operator==(Complex &c1,Complex &c2);

    friend bool operator!=(Complex &c1,Complex &c2);

private:

    double re;//复数实部

    double im;//复数虚部

};

//重载+运算符

Complex operator+(Complex &c1,Complex &c2)

{

    Complex c;

    c.re=c1.re+c2.re;

    c.im=c1.im+c2.im;

    return Complex(c.re,c.im);

}

//重载*运算符 (a+bi) * (c+di) = (ac-bd) + (bc+ad)i

Complex operator*(Complex &c1,Complex &c2)

{

    Complex c;

    c.re=c1.re*c2.re-c1.im*c2.im;

    c.im=c1.im*c2.re+c1.re*c2.im;

    return Complex(c.re,c.im);

}

//重载-运算符

Complex Complex::operator-(Complex &c)

{

    return Complex(re-c.re,im-c.im);

}

//重载/运算符

//(a+bi)/(c+di)=((ac+bd)/(c*c+d*d))+((bc-ad)/(c*c+d*d))i

Complex Complex::operator/(Complex &c)

{

    double r,i;

    r=(re*c.re+im*c.im)/(c.re*c.re+c.im*c.im);

    i=(im*c.re-re*c.im)/(c.re*c.re+c.im*c.im);

    return Complex(r,i);

}

//重载输入运算符

istream & operator>>(istream &in,Complex &c)

{

    cout<<"请输入实部:"<<endl;

    in>>c.re;

    cout<<"请输入虚部:"<<endl;

    in>>c.im;

    return in;

}

//重载输出运算符

ostream & operator<<(ostream & out,Complex &c)

{

    if(c.re==0&&c.im!=0)

    {

        if(c.im==1)

        {

            out<<"i"<<endl;

        }

        else if(c.im==-1)

        {

            out<<"-i"<<endl;

        }

        else

        {

            out<<c.im<<"i"<<endl;

        }

    }

    else if(c.re!=0&&c.im==0)

    {

        out<<c.re<<endl;

    }

    else if(c.re==0&&c.im==0)

    {

        out<<"0"<<endl;

    }

    else if(c.re!=0&&c.im!=0)

    {

        if(c.im<0)

        {

            if(c.im==-1)

            {

                out<<c.re<<"-i"<<endl;

            }

            else

            {

                out<<c.re<<c.im<<"i"<<endl;

            }

        }

        else if(c.im>0)

        {

            if(c.im==1)

            {

                out<<c.re<<"+"<<"i"<<endl;

            }

            else

            {

                out<<c.re<<"+"<<c.im<<"i"<<endl;

            }

        }

    }

    return out;

}

//重载==运算符

bool operator ==(Complex &c1,Complex &c2)

{

    if(c1.re==c2.re&&c1.im==c2.im)

    {

        return true;

    }

    else

    {

        return false;

    }

}

//重载!=运算符

bool operator !=(Complex &c1,Complex &c2)

{

    if(c1.re!=c2.re||c1.im!=c2.im)

    {

        return true;

    }

    else

    {

        return false;

    }

}

//菜单

int Menu()

{

    int t;

    cout<<"==================================="<<endl;

    cout<<"          1.输入复数"<<endl;

    cout<<"          2.查看输入的复数"<<endl;

    cout<<"          3.复数相加"<<endl;

    cout<<"          4.复数相减"<<endl;

    cout<<"          5.复数相乘"<<endl;

    cout<<"          6.复数相除"<<endl;

    cout<<"          7.输出结果"<<endl;

    cout<<"          0.退出"<<endl;

    cout<<"=================================="<<endl;

    cout<<"请选择(0-7):";

     while(1)

    {

        cin >> t;

        if(t >= 0 && t <= 7)

            break;

        else

        {

            cout << "该选项不在目录中,请重新输入!" << endl;

            continue;

        }

    }

    return t;

}

int main()

{

    Complex c1,c2,c3;

    int i=1;

    while(i!=0)

    {

        i=Menu();

        if(i==1)

        {

            cout<<"请输入一个复数:"<<endl;

            cin>>c1;

        }

        else if(i==2)

        {

            cout<<c1;

        }

        else if(i==3)

        {

            cout<<"第一个复数为:"<<endl;

            cout<<c1;

            cout<<"输入一个复数与之相加:"<<endl;

            cin>>c2;

            cout<<"第二个复数为:"<<endl;

            cout<<c2;

            c3=c1+c2;

        }

        else if(i==4)

        {

            cout<<"第一个复数为:"<<endl;

            cout<<c1;

            cout<<"输入一个复数与之相减:"<<endl;

            cin>>c2;

            cout<<"第二个复数为:"<<endl;

            cout<<c2;

            c3=c1-c2;

        }

        else if(i==5)

        {

            cout<<"第一个复数为:"<<endl;

            cout<<c1;

            cout<<"输入一个复数与之相乘:"<<endl;

            cin>>c2;

            cout<<"第二个复数为:"<<endl;

            cout<<c2;

            c3=c1*c2;

        }

        else if(i==6)

        {

            cout<<"第一个复数为:"<<endl;

            cout<<c1;

            cout<<"输入一个复数与之相除:"<<endl;

            cin>>c2;

            cout<<"第二个复数为:"<<endl;

            cout<<c2;

            c3=c1/c2;

        }

        else if(i==7)

        {

            cout<<"运算结果为:"<<endl;

            cout<<c3;

        }

        else if(i==0)

            break;

    }

    return 0;

}