友元函數(shù)是一種非成員函數(shù),擁有訪問私有或受保護(hù)成員的權(quán)限。使用友元函數(shù)可方便實(shí)現(xiàn)跨類數(shù)據(jù)共享、訪問私有成員以實(shí)現(xiàn)特定功能、允許外部函數(shù)訪問類私有數(shù)據(jù)等。
C++ 友元函數(shù)詳解:何時(shí)使用友元函數(shù)?
什么是友元函數(shù)?
友元函數(shù)是允許訪問私有或受保護(hù)成員的非成員函數(shù)。友元函數(shù)不是類的一部分,但具有訪問類私有成員的權(quán)限。
何時(shí)使用友元函數(shù)?
在以下情況下,使用友元函數(shù)很方便:
訪問私有成員以實(shí)現(xiàn)特定功能。
跨類進(jìn)行數(shù)據(jù)共享。
允許外部函數(shù)訪問類私有數(shù)據(jù)。
語法
聲明友元函數(shù)的語法如下:
friend 返回類型 函數(shù)名(參數(shù)列表);
登錄后復(fù)制
friend
關(guān)鍵字用于指定函數(shù)為友元函數(shù)。
實(shí)戰(zhàn)案例
考慮以下代碼,它定義了一個(gè)具有私有成員 data
的類:
class MyClass { private: int data; public: // ... };
登錄后復(fù)制
現(xiàn)在,我們需要一個(gè)友元函數(shù)來訪問 data
成員,以便對其進(jìn)行修改:
friend void modifyData(MyClass& obj, int newData) { obj.data = newData; }
登錄后復(fù)制
該 modifyData
函數(shù)聲明為友元函數(shù),因此它可以訪問類 MyClass
的私有成員 data
。
注意事項(xiàng)
謹(jǐn)慎使用友元函數(shù),因?yàn)樗鼈兝@過了封裝性原則。
友元函數(shù)只能訪問私有或受保護(hù)成員,不能訪問類私有方法。
友元函數(shù)不是類的一部分,因此不能使用 this
指針。