重载为友元函数(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;
}

浙公网安备 33010602011771号