(1)再定义一目运算符 -,-c相当于0-c。
(2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator+(Complex &c);
Complex operator-(Complex &c);
Complex operator*(Complex &c);
Complex operator/(Complex &c);
Complex operator-();
friend istream &operator>>(istream &in,Complex &c);
friend ostream &operator<<(ostream &out,Complex &c);
private:
double real;
double imag;
};
Complex Complex::operator+(Complex &c)
{
Complex a;
a.real=real+c.real;
a.imag=imag+c.imag;
return a;
}
Complex Complex::operator-(Complex &c)
{
Complex a;
a.real=real-c.real;
a.imag=imag-c.imag;
return a;
}
Complex Complex::operator*(Complex &c)//复数相乘:(a+bi)(c+di)=(ac-bd)+(bc+ad)i.
{
Complex a;
a.real=real*c.real-imag*c.imag;
a.imag=imag*c.real+real*c.imag;
return a;
}
Complex Complex::operator/(Complex &c)//复数相除:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i
{
Complex a;
a.real=(real*c.real+imag*c.imag)/(c.real*c.real+c.imag*c.imag);
a.imag=(imag*c.real-real*c.imag)/(c.real*c.real+c.imag*c.imag);
return c;
}
Complex Complex::operator-()
{
double r=-real;
double i=-imag;
Complex a(r,i);
return a;
}
istream &operator>>(istream &in,Complex &c)
{
int a,b;
char ch,i;
cout<<"请输入复数(输入格式:a+bi或a-bi):";
while(1)
{
in>>a>>ch>>b>>i;
if((ch=='+'||ch=='-')&&i=='i') break;
cerr<<"输入格式错误,请重新输入\n";
}
c.real=a;
c.imag=(ch=='+')?b:-b;
return in;
}
ostream &operator<<(ostream &out,Complex &c)
{
out<<c.real;
if(c.imag>=0) out<<"+";
out<<c.imag<<"i";
return out;
}
int main()
{
Complex a,b,c;
cin>>a;
cout<<a<<endl;
cin>>b;
cout<<b<<endl;
c=a+b;
cout<<"a+b=";
cout<<c<<endl;
c=a-b;
cout<<"a-b=";
cout<<c<<endl;
c=a*b;
cout<<"a*b=";
cout<<c<<endl;
c=a/b;
cout<<"a/b=";
cout<<c<<endl;
cout<<"-c:"<<-c<<endl;
return 0;
}