现在的位置: 首页 > 综合 > 正文

C++ FAQ学习笔记 14 章 友元

2017年12月18日 ⁄ 综合 ⁄ 共 606字 ⁄ 字号 评论关闭
文章目录

[14.2] 友元破坏了封装吗?UPDATED!

[Recently made a bit more emphatic (on 4/01). Click here to go to the next FAQ in the "chain" of recent changes.]

如果被适当的使用,实际上可以增强封装。

在许多情况下,这些 get()/set()成员函数和公有数据一样差劲:它们仅仅隐藏了私有数据的名称,而没有隐藏私有数据本身

[14.3] 使用友元函数的优缺点是什么?

友元函数在接口设计选择上提供了一定程度的自由。

成员函数和友元函数具有同等的特权(100% 的)

友元函数主要缺点是需要额外的代码来支持动态绑定时。要得到虚友元(virtual friend)的效果,友元函数应该调用一个隐藏的(通常是 protected:成员函数。这称为虚友元函数用法(Virtual
Friend Function Idiom)

[14.5] 类应该使用成员函数还是友元函数?

尽量使用成员函数,不得已时使用友元。

有时在语法上,友元更好(例如,Fred类中,友元函数允许Fred参数作为第二个参数,而成员函数必须是第一个)。另一个好的用法是二元中缀运算符。例如,如果你想允许aFloat + aComplex 的话,aComplex + aComplex 应该被定义为友元而不是成员函数。(成员函数不允许提升左边的参数,因为那样会改变成员函数调用对象的类)。

在其他情况下,首选成员函数。

抱歉!评论已关闭.