📅  最后修改于: 2023-12-03 14:59:50.261000             🧑  作者: Mango
在C++中,可以使用friend
关键字来访问类的私有成员。一个友元可以是一个函数、另一个类或整个类的所有成员。在本文中,我们将讨论如何使用friend
来创建友元类和函数。
一个友元函数可以访问包含该函数的类的私有成员。为了让一个函数成为一个类的友元函数,我们需要在类中声明该函数的原型,并在该函数的定义前面添加friend
关键字,如下所示:
class MyClass {
public:
void publicFunction();
private:
int privateMember;
friend void friendFunction(MyClass&);
};
void friendFunction(MyClass& instance) {
instance.privateMember = 42;
}
void MyClass::publicFunction() {
friendFunction(*this);
}
在上面的代码示例中,friendFunction
是MyClass
的一个友元函数。该函数可以访问privateMember
私有变量。我们可以通过类的公共成员函数(publicFunction
)来调用该函数。
一个友元类可以访问包含该类的所有私有成员。要创建一个友元类,我们需要在该类的定义中将要访问该类的类声明为友元类,如下所示:
class MyClass {
public:
void setPrivateMember(int x) { privateMember = x; }
private:
int privateMember;
friend class FriendClass;
};
class FriendClass {
public:
void setPrivateMember(MyClass& instance, int x) {
instance.privateMember = x;
}
};
int main() {
MyClass instance;
FriendClass friendObj;
friendObj.setPrivateMember(instance, 42);
}
在上面的代码示例中,FriendClass
是MyClass
的一个友元类。该类可以访问MyClass
中的所有私有成员(包括privateMember
私有变量)。在main
函数中,我们实例化了MyClass
和FriendClass
的对象,并调用setPrivateMember
函数来设置privateMember
的值。
总之,友元类和友元函数是一种灵活的机制,可以允许类的外部代码访问类的私有成员。然而,它们应该被谨慎使用,因为它们破坏了数据封装的概念。