头文件
#ifndef COMPLEX0_H_
#define CONPLEX0_H_
#include<iostream>
class complex
{
private:
double real;
double imaginary;
public:
complex(){real=imaginary=0;}
complex(double r,double i);
complex operator+(const complex &c)const;//
complex operator-(const complex &c)const;
complex operator*(const complex &c)const;
complex operator*(const double x)const;
complex operator~()const;
friend complex operator*(double n,const complex &c);//两个乘法重载,使2*c和c*2都能运行
friend std::ostream &operator<<(std::ostream &os,const complex &c);//<<不是成员函数,不能再后面加const
friend std::istream &operator>>(std::istream &is,complex &c);
};
#endif
#include<iostream>
#include "complex0.h"
using namespace std;
complex::complex(double r,double i)
{
real=r;
imaginary=i;
}
complex complex::operator *(const complex &c)const
{
return complex((real*c.real-imaginary*c.imaginary),(real*c.imaginary+c.real*imaginary));
}
complex complex::operator+(const complex &c)const
{
return complex((real+c.real),(imaginary+c.imaginary));
}
complex complex::operator-(const complex &c)const
{
return complex((real-c.real),(imaginary-c.imaginary));
}
complex complex::operator*(const double x)const
{
return complex((real*x),(imaginary*x));
}
complex complex::operator~()const
{
return complex(real,-imaginary);
}
complex operator*(double n,const complex &c)
{
return c*n;
}
std::ostream &operator<<(std::ostream &os,const complex &c)//<<不是成员函数,不能再后面加const
{
os<<"("<<c.real<<","<<c.imaginary<<"i)";
return os;
}
std::istream &operator>>(std::istream &is,complex &c)
{
cout<<"请输入实部:";
if(is>>c.real)
{
cout<<"请输入虚部:";
is>>c.imaginary;
}
return is;
}
#include<iostream>
#include "complex0.h"
using namespace std;
int main()
{
complex a(3.0,4.0);
complex c;
cout<<"Enter a complex number(q to quit):\n";
while(cin>>c)
{
cout<<"c is "<<c<<'\n';
cout<<"complex conjugate is "<<~c<<'\n';
cout<<"a is "<<a<<'\n';
cout<<"a+c is "<<a+c<<'\n';
cout<<"a-c is "<<a-c<<'\n';
cout<<"a*c is "<<a*c<<'\n';
cout<<"2*c is "<<2*c<<'\n';
cout<<"Enter a complex numbet(q to quit):\n";
}
cout<<"Done!\n";
return 0;
}