参考链接: 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;
}