重载为友元函数(P154)

/*

重载运算符为友元函数

运算符重载表示为友元函数时,两个操作数都要列出。

*/

#include <iostream>
using namespace std;

class myComplex
{
private:
double real,imag;
public:
myComplex()
{
real=0;
imag=0;
}
myComplex(double r,double i)
{
real=r;
imag=i;
}
void outCom();
myComplex operator-(const myComplex &c);
friend myComplex operator+(const myComplex &c1,const myComplex &c2);

friend myComplex operator-(const myComplex &c1,const myComplex &c2);

friend myComplex operator-(const myComplex &c1,double r);

friend myComplex operator-(double r,const myComplex &c1);
};

myComplex operator+(const myComplex &c1,const myComplex &c2)
{
return myComplex(c1.real+c2.real,c1.imag+c2.imag);
}

myComplex operator-(const myComplex &c1,const myComplex &c2)
{
return myComplex(c1.real-c2.real,c1.imag-c2.imag);
}
myComplex operator-(const myComplex &c1,double r)
{
return myComplex(c1.real-r,c1.imag);
}

myComplex operator-(double r,const myComplex &c1)
{
return myComplex(r-c1.real-r,-c1.imag);
}

void myComplex::outCom()
{
cout<<"("<<real<<","<<imag<<")";
}

int main(int argc, const char * argv[])
{
// insert code here...
myComplex c1(1,2),c2(3,4),res;
c1.outCom();
cout<<"operator+";
c2.outCom();
cout<<"=";
res=c1+c2;
res.outCom();
cout<<endl;
res=c1-5;
res.outCom();
cout<<endl;
res=5-c1;
res.outCom();
cout<<endl;
return 0;
}

posted @ 2020-03-14 09:47  CollisionDimension  阅读(137)  评论(0)    收藏  举报