友元函数和友元类是类主动授权的访问机制,不破坏封装;友元函数非成员函数,用friend在类内声明,无this指针,需通过对象访问私有成员。

友元函数和友元类是C++中突破封装限制的机制,它们可以访问类的私有(private)和保护(protected)成员,但**不破坏类的封装本质**——因为这种访问权限是类主动授予的,而非外部强行闯入。
友元函数:被授权的普通函数
友元函数不是类的成员,却能访问该类的所有私有和保护成员。它必须在类内部用 friend 关键字声明,声明时不带 friend 修饰符的定义或实现写在类外。
- 声明位置在类内任意访问区域(
public/private/protected都可),但习惯放在public区 - 友元函数的参数通常包含对应类的对象(或引用/指针),以便操作其私有数据
- 它没有
this指针,也不是成员函数,因此不能直接写memberVar,而要通过对象名访问:obj.privateMember
例如:
class Box {
private:
double width = 10.0;
public:
friend void printWidth(const Box& b); // 声明友元函数
};
void printWidth(const Box& b) {
std::cout << "Width: " << b.width; // ✅ 可直接访问私有成员 width
}登录后复制
友元类:被整体授权的另一个类
若类 A 声明类 B 为友元,则类 B 的所有成员函数(包括构造、析构、普通成员函数)都能访问类 A 的私有和保护成员。
立即学习“C++免费学习笔记(深入)”;
标签: c++
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~