在C++中,類(lèi)友元函數(shù)是一種特殊的函數(shù),它可以訪問(wèn)類(lèi)的私有和保護(hù)成員。友元函數(shù)不是類(lèi)的成員函數(shù),因此它不受類(lèi)的訪問(wèn)控制規(guī)則的限制。
要聲明一個(gè)友元函數(shù),可以在類(lèi)定義中使用friend
關(guān)鍵字。例如:
class MyClass {
private:
int privateVar;
protected:
int protectedVar;
public:
MyClass(int var) : privateVar(var), protectedVar(var) {}
friend void accessPrivateMembers(MyClass& obj);
};
void accessPrivateMembers(MyClass& obj) {
std::cout << "Private variable: " << obj.privateVar << std::endl;
std::cout << "Protected variable: " << obj.protectedVar << std::endl;
}
在上面的示例中,accessPrivateMembers
函數(shù)被聲明為MyClass
類(lèi)的友元函數(shù)。它可以訪問(wèn)MyClass
類(lèi)的私有成員privateVar
和保護(hù)成員protectedVar
。
要調(diào)用友元函數(shù),可以使用類(lèi)對(duì)象作為參數(shù)。例如:
int main() {
MyClass obj(10);
accessPrivateMembers(obj);
return 0;
}
輸出結(jié)果為:
Private variable: 10
Protected variable: 10
需要注意的是,友元函數(shù)不是類(lèi)的成員函數(shù),因此它不受類(lèi)的訪問(wèn)控制規(guī)則的限制。但是,友元函數(shù)也不能訪問(wèn)類(lèi)的私有和保護(hù)構(gòu)造函數(shù)和析構(gòu)函數(shù)。