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