指导方针7:避免把(远距离的)友元关系授权给定义在另一个组件中的一个逻辑实体。
原则10:一个组件内部的友元关系是该组件的一个实现细节。
定义13:若通过一个组件的逻辑接口不能通过程序访问或探测到该组件包含的一个实现细节(类型、数据或函数),则称这些实现细节被该组件封装了。
原则11:为定义在同一个组件内的类授予(局部的)友元关系不会破坏封装。
从组件的角度来说,一个操作(函数、运算符重载)是不是某一个类的友元,无法从接口表现出来。
原则12:在组件内定义一个容器类的同时定义一个迭代器类,可以在保持封装的同时,使组件具有用户可扩展性、改进可维护性和加强重用性。
原则13:对一个定义在系统的单独物理部分的逻辑实体,授权(远距离)友元关系,会破坏授予该友元关系的那个类的封装。
在一个组件之外对逻辑实体授予友元关系,称为远距离友元关系(long-distance friendship)。
对系统的另一个物理片段授予私有访问权,会导致封装存在漏洞,很可能会被通过插入一个假冒的组件来获得访问而滥用。
局部友元关系的过度使用也会影响可维护性,授权友元关系会扩大一个类本身的"接口",有权访问对象实现细节的函数越多,当修改实现时需要回访的代码也越多。
原则14:友元关系影响访问特权但不隐含依赖。
本文探讨了C++中封装的重要性及友元关系的原则,包括局部与远距离友元的区别,以及如何在保持封装的同时增强组件的可扩展性和可维护性。
3656

被折叠的 条评论
为什么被折叠?



