#include <iostream>
class A {
private:
int m_data;
// 声明友元函数
friend void friendFunc(A& a);
// 声明友元类
friend class FriendClass;
public:
A(int data) : m_data(data) {}
};
// 友元函数定义
void friendFunc(A& a) {
std::cout << "Friend function accessing m_data: " << a.m_data << std::endl;
}
class FriendClass {
public:
void accessData(A& a) {
std::cout << "Friend class member function accessing m_data: " << a.m_data << std::endl;
}
};
友元机制在访问控制中的作用
- 突破封装限制:友元机制允许非类成员函数(友元函数)或其他类(友元类)访问该类的私有和保护成员,打破了类的封装性,在特定场景下方便了数据访问和操作。
- 提高代码效率:例如在一些需要频繁访问类私有成员的函数中,将其设为友元函数可以避免通过类的公有接口来间接访问,从而提高效率。
潜在风险
- 破坏封装性:破坏了类的封装特性,使得类的内部实现细节对外部可见,降低了类的独立性和可维护性。如果类的内部结构改变,可能影响到所有依赖友元机制的代码。
- 降低安全性:由于友元可以直接访问类的私有成员,一旦友元函数或友元类的代码出现错误,可能导致对类数据的非法访问或修改,增加了程序出错的风险。