C++ 友元 (friend)作用:突破类的访问权限,让外部函数 / 外部类,可以访问本类的private、protected私有成员。封装原则:尽量少用友元;友元破坏封装,适合运算符重载、跨类协作场景。友元分 3 种用法:友元全局函数(普通外部函数做友元)友元成员函数(另一个类的成员函数作为友元)友元整个类(把另一个类全部设为本类友元)注意: ①friend声明写在类内部,不受public/private位置影响; ② 友元关系不能继承、不能传递;A 是 B 友元,B 是 C 友元 ≠ A 是 C 友元。1. 友元全局函数普通全局函数,声明为类友元,可以直接访问私有变量cpp#include iostream using namespace std; class Person { private: int age; public: Person(int a) : age(a) {} // 声明全局函数为友元,写在类内 friend void showAge(Person p); }; // 全局函数,不是类成员函数,没有this指针 void showAge(Person p) { // 直接访问Person的private成员age cout "age = " p.age endl; } int main() { Person p(25); showAge(p); return 0; }2. 友元:另一个类的成员函数只把对方某一个成员函数作为友元,不是全部。需要注意类的前置声明,解决相互依赖编译报错。cpp#include iostream using namespace std; // 前置声明,告诉编译器有个Boy类 class Boy; class Girl { private: int money = 1000; public: // 声明Boy的成员函数visit为Girl的友元 friend void Boy::visit(Girl g); }; class Boy { public: void visit(Girl g) { // Boy::visit 可以访问Girl私有成员 cout "girl money:" g.money endl; } }; int main() { Girl g; Boy b; b.visit(g); return 0; }3. 友元类:整个类作为友元将类 B 声明为类 A 的友元,B 所有成员函数都可以访问 A 的私有成员。⚠️ 友元单向:B 是 A 友元,A 不能访问 B 私有,除非再显式声