友元的作用是提高了程序的運行效率(即減少了類型和安全性檢查及調(diào)用的時間開
銷),但它破壞了類的封裝性和隱藏性,使得非成員函數(shù)可以訪問類的私有成員。
友元可以是一個函數(shù),該函數(shù)被稱為友元函數(shù);友元也可以是一個類,該類被稱為
友元類。
友元函數(shù)終究不是成員函數(shù),成員中有隱參 this 指針,可以直接訪問成員,而友元
中則沒有,必須得通過對象來訪問。
友元函數(shù)語法格式:
class A
{
friend void globalfunction(A &,...)public:
....
}
一個類的成員函數(shù)作友員,在聲明為另一個類的友員時,要將原類的作用域加上,
語法格式如下:
class A
{
friend
void One::globalfunction(A&,...);public:
...
}
友元類:
class A
{
????friend class B;
? ? public:
? ? private:
...
};
? 友元關(guān)系不能被繼承。
?友元關(guān)系是單向的,不具有交換性。若類 B 是類 A 的友元,類 A 不一定是類 B
的友元,要看在類中是否有相應(yīng)的聲明。
?友元關(guān)系不具有傳遞性。若類 B 是類 A 的友元,類 C 是 B 的友元,類 C 不一定
是類 A 的友元,同樣要看類中是否有相應(yīng)的聲明。