c++++ 中友元函數(shù)可以通過訪問說明符或名稱空間限制訪問權(quán)限,以實(shí)現(xiàn)僅允許特定函數(shù)或特定命名空間內(nèi)的函數(shù)訪問類的私有成員。
C++ 友元函數(shù)詳解:如何限制友元函數(shù)的訪問權(quán)限?
在 C++ 中,友元函數(shù)是允許外部函數(shù)訪問類的私有成員的特別函數(shù)。它使我們能夠在一個(gè)類之外訪問另一個(gè)類的私有數(shù)據(jù)或函數(shù),從而在某些情況下提供更大的靈活性。
限制友元函數(shù)訪問權(quán)限
我們可以通過限制友元聲明來限制友元函數(shù)對(duì)私有成員的訪問權(quán)限。有兩種方法可以做到這一點(diǎn):
方法 1:使用訪問說明符
我們可以使用訪問說明符(public、protected 或 private)來限制友元函數(shù)的訪問權(quán)限。語法如下:
class MyClass {
private:
// 私有成員只能被友元函數(shù)訪問
friend void friendFunction();
};
登錄后復(fù)制
方法 2:使用名稱空間
也可以使用名稱空間來限制友元函數(shù)的可見性。語法如下:
namespace MyNamespace {
class MyClass {
private:
// 私有成員由 MyNameSpace 命名空間內(nèi)部所有友元函數(shù)訪問
friend class MyFriendClass;
};
}
登錄后復(fù)制
實(shí)戰(zhàn)案例
假設(shè)我們有以下兩個(gè)類:
class Person {
private:
string name;
int age;
};
class FriendClass {
public:
// 可以訪問私有成員,因?yàn)樗且粋€(gè)友元類
void printPersonDetails(Person person) {
cout << person.name << ", " << person.age << endl;
}
};
登錄后復(fù)制
在這里,FriendClass 是 Person 類的友元類,因此它可以訪問 name 和 age 等私有成員。
運(yùn)行示例
int main() {
Person person{"John Doe", 30};
FriendClass friendObj;
friendObj.printPersonDetails(person);
return 0;
}
登錄后復(fù)制
輸出:
John Doe, 30
登錄后復(fù)制






