什么是 C++ 中的友元函数和友元类?友元的作用是什么?有什么注意事项?
友元函数
定义
友元函数是在类中声明的非成员函数,它可以访问类的私有(private)和保护(protected)成员。友元函数虽然不是类的成员函数,但它被授予了访问类内部成员的特殊权限。
声明方式
在类的定义中,使用friend关键字来声明友元函数。
class MyClass {
private:
int privateData;
friend void friendFunction(MyClass& obj);
};
void friendFunction(MyClass& obj) {
obj.privateData = 10; // 可以访问私有成员
}
友元类
定义
友元类是指一个类可以访问另一个类的私有(private)和保护(protected)成员。如果类 A 是类 B 的友元类,那么类 A 的所有成员函数都可以访问类 B 的私有和保护成员。友元关系是单向的,不具有传递性。如果类A是类B的友元,类B不一定是类A的友元
声明方式
在类的定义中,使用friend关键字来声明友元类
class FriendClass {
private:
int privateData;
public:
FriendClass() : privateData(0) {}
friend class OtherClass; // 声明 OtherClass 是 FriendClass 的友元类
};
class OtherClass {
public:
void accessPrivateData(FriendClass& obj) {
obj.privateData = 42; // 可以直接访问 FriendClass 的私有成员
}
};
作用
在C++中,友元(friend)是一种机制,允许某个类或函数访问其他类的私有成员。通过友元,可以授予其他类或函数对该类的私有成员的访问权限。友元关系在一些特定的情况下很有用,例如在类之间共享数据或实现特定的功能。
注意事项
封装性破坏风险
友元关系最大的风险在于它打破了类的封装性。类的封装原则是将数据隐藏起来,只通过成员函数来访问和修改数据。当使用友元时,外部的函数(友元函数)或者类(友元类)可以直接访问私有和保护成员,这可能会导致数据被意外地修改或者访问。
谨慎使用友元函数和友元类的继承关系
友元关系不会被继承。如果类 A 是类 B 的友元类,类 A 的子类不会自动成为类 B 的友元类。同样,类 B 的子类也不会自动继承和类 A 的友元关系。
避免过度使用
应该谨慎地使用友元。只有在确实有必要的情况下,如为了实现高效的操作符重载或者两个紧密相关的类之间需要特殊的访问权限时才使用。过度使用友元会使代码的结构变得松散,违背面向对象编程的封装原则。
原文地址:https://blog.csdn.net/m0_73949707/article/details/143865599
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!