Posted on 2011-12-18 12:34
hoshelly 閱讀(1293)
評論(0) 編輯 收藏 引用
運(yùn)算符重載函數(shù)一般采用兩種形式,一種是定義為類的成員函數(shù),另一種是定義為類的友元函數(shù)。
大多數(shù)情況下,使用成員函數(shù)和友元函數(shù)重載運(yùn)算符在功能實現(xiàn)上是相同的,重載時如果沒有本質(zhì)的區(qū)別,則應(yīng)該首先考慮使用成員函數(shù)以保證數(shù)據(jù)封裝。然而在某些情況下,如C++不能直接進(jìn)行復(fù)數(shù)加、減、乘、除的四則運(yùn)算,但是使用友元函數(shù)就可以實現(xiàn)重載這些運(yùn)算符。
如 定義
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);
}...
!注意友元運(yùn)算符函數(shù)的參數(shù)類型是引用類型!
一般而言,以下兩種調(diào)用方法是等價的:
aa@ bb //隱式調(diào)用
operator @ (aa,bb) // 顯式調(diào)用
@為運(yùn)算符
在實際開發(fā)過程中,單目運(yùn)算符建議重載為成員函數(shù),而雙目運(yùn)算符建議重載為友元函數(shù)。通常下雙目運(yùn)算符重載為友元函數(shù)比重載為成員函數(shù)更方便,但是有時雙目運(yùn)算符必須重載為成員函數(shù),例如賦值運(yùn)算符。