编程语言C++的友元函数或友元类可以在多个不同的类之间工作,试想一下,如果出现必须同时访问不同的类的私有或受保护成员,没有友元,你必须定义多个不必要的公有方法和辅助函数,增加不必要的代码量。而有了友元,就可以大大减少这些不必要的麻烦。
但是友元也有很大的缺陷:
1、各种目标类给予了友元绝对信任,会导致目标类们之间的关系错综复杂,难以理解和维护;
2、突破了类原本的封装性,封装的目的是安全,使用友元又使类成员的安全性无法保障;
3、友元关系不具备交换性(A类是B类的友元,B类不一定是A类的友元)、继承性(若C类继承自A类,C类却不一定是B类的友元)、传递性(A类是B类的友元,B类是C类的友元,A类不一定是C类的友元),并不具备良好性质
代替方案:
如果不是一定要用友元,建议使用公共接口类代替