Posted on 2011-12-18 12:34
hoshelly 阅读(1277)
评论(0) 编辑 收藏 引用
运算符重载函数一般采用两种形式,一种是定义为类的成员函数,另一种是定义为类的友元函数。
大多数情况下,使用成员函数和友元函数重载运算符在功能实现上是相同的,重载时如果没有本质的区别,则应该首先考虑使用成员函数以保证数据封装。然而在某些情况下,如C++不能直接进行复数加、减、乘、除的四则运算,但是使用友元函数就可以实现重载这些运算符。
如 定义
class complex
{
public:
complex(){real=imag=0;}
complex(double r,double i)
{
real=r,imag=r;
}
friend complex operator+(const complex &c1,const complex &c2)
{
return complex(c1.real+c2.real,c1.imag+c2.imag);
}...
!注意友元运算符函数的参数类型是引用类型!
一般而言,以下两种调用方法是等价的:
aa@ bb //隐式调用
operator @ (aa,bb) // 显式调用
@为运算符
在实际开发过程中,单目运算符建议重载为成员函数,而双目运算符建议重载为友元函数。通常下双目运算符重载为友元函数比重载为成员函数更方便,但是有时双目运算符必须重载为成员函数,例如赋值运算符。