友元函数是类显式授权、可访问其私有和保护成员的非成员函数;需在类内用friend声明原型,定义在类外,常用于重载运算符、跨类协作等场景。
友元函数是C++中一种被类显式授权、可以访问该类私有(private)和保护(protected)成员的普通函数——它不是类的成员,也不受访问控制限制,但必须由类主动声明为friend。
在类内部用friend关键字声明函数原型,不加public/private,也不带static或virtual等修饰。该函数可以是全局函数,也可以是其他类的成员函数。
A::)当某些操作逻辑上不属于类的职责,却需要深度访问其内部数据时,友元提供了一种可
控的“破例”机制。典型场景包括:
operator),因为流对象在左,类对象在右,无法作为成员函数(否则cout 会要求cout提供成员函数)
它打破了封装性,所以要用得克制。常见注意事项:
this指针,访问成员必须通过对象名(如obj.private_data)A::static_private或obj.static_private)undefined reference
基本上就这些。友元不是封装的敌人,而是封装的协作者——关键在“谁授权”和“为何授权”,而不是“能不能访问”。