友元函數(shù)可訪問類私有和受保護(hù)數(shù)據(jù)成員,而全局函數(shù)不行,友元函數(shù)在類聲明中聲明,全局函數(shù)在類外聲明,使用 friend 關(guān)鍵字聲明友元函數(shù),用 extern 關(guān)鍵字聲明全局函數(shù)。友元函數(shù)通過聲明方式獲得訪問類成員變量的權(quán)限,如通過聲明一個友元函數(shù) getprivatedata 可以訪問 myclass 類私有變量 x。
C++ 友元函數(shù)詳解
友元函數(shù)和全局函數(shù)的區(qū)別
在 C++ 中,友元函數(shù)是一種特殊的函數(shù),它可以訪問類成員函數(shù)中聲明的私有和受保護(hù)的數(shù)據(jù)成員。相比之下,全局函數(shù)在類外聲明,無法訪問私有和受保護(hù)的數(shù)據(jù)成員。
友元函數(shù)的語法
友元函數(shù)的語法如下:
friend 返回類型 函數(shù)名(參數(shù)列表);
登錄后復(fù)制
例如,聲明一個可以訪問 MyClass
中私有數(shù)據(jù)成員的友元函數(shù):
friend int getPrivateData(MyClass& object);
登錄后復(fù)制
友元函數(shù)和全局函數(shù)的區(qū)別
友元函數(shù)和全局函數(shù)的主要區(qū)別如下:
訪問范圍:友元函數(shù)可以訪問類中的私有和受保護(hù)的數(shù)據(jù)成員,而全局函數(shù)不能。作用域:友元函數(shù)可以在類的聲明中聲明,而全局函數(shù)在類外聲明。聲明方式:友元函數(shù)使用 friend
關(guān)鍵字聲明,而全局函數(shù)使用 extern
關(guān)鍵字聲明。
實戰(zhàn)案例
考慮一個包含私有成員變量 x
的 MyClass
類:
class MyClass { private: int x; public: int getX(); void setX(int value); };
登錄后復(fù)制
要訪問 MyClass
的私有數(shù)據(jù)成員 x
,我們可以聲明一個友元函數(shù):
friend int getPrivateData(MyClass& object) { return object.x; }
登錄后復(fù)制
使用友元函數(shù)
我們可以使用友元函數(shù)來訪問 MyClass
的私有數(shù)據(jù)成員:
int main() { MyClass object; object.setX(10); int privateData = getPrivateData(object); cout << "Private data: " << privateData << endl; return 0; }
登錄后復(fù)制
運(yùn)行此代碼將輸出:
Private data: 10
登錄后復(fù)制