在C++中,友元(Friend)是一种特殊的访问权限,允许类的非成员函数或其他类的成员函数访问该类的私有成员。可以通过将这些函数声明为该类的友元来实现。
下面是一个简单的示例:
class MyClass {
private:
int private_data;
public:
MyClass(): private_data(0) {}
friend void friend_func(MyClass& obj);
};
void friend_func(MyClass& obj) {
obj.private_data = 123; // 访问私有成员
}
int main() {
MyClass obj;
friend_func(obj); // 调用友元函数
return 0;
}
在上述代码中,MyClass
类中定义了一个私有成员变量private_data
,同时声明了friend_func
函数为该类的友元。friend_func
函数可以直接访问MyClass
对象的私有成员变量,并对其进行修改。
需要注意的是,友元函数并不属于该类的成员函数,因此它不能使用该类的this指针,也不能直接访问该类的成员函数。
除了友元函数外,C++中还支持友元类。友元类可以访问该类的所有私有成员,例如:
class MyClass {
private:
int private_data;
friend class FriendClass;
};
class FriendClass {
public:
void func(MyClass& obj) {
obj.private_data = 456; // 访问私有成员
}
};
int main() {
MyClass obj;
FriendClass fc;
fc.func(obj); // 调用友元类的函数
return 0;
}
在上述代码中,MyClass
类声明了FriendClass
类为其友元,该类可以访问MyClass
对象的私有成员。然后,在main
函数中创建了MyClass
对象和FriendClass
对象,并通过调用FriendClass
对象的函数来访问MyClass
对象的私有成员变量。