c – 非会员非朋友的功能是否真的增加封装?

我目前正在阅读斯科特·迈尔斯的有效C书,但是我不知道第23项.他说:

Prefer non-member non-friend functions to member functions. Doing so increases encapsulation,packaging flexibility,and functional extensibility.

虽然我可以看到在课外添加外部函数的观点,但我看不到它的优点.他谈论这些,因为它们正在增加封装.那么是的,这是正确的,因为非会员的非朋友功能将无法访问在类中声明的任何成员变量作为私有成员变量.但是,这就是我无法解决的问题.拥有允许对象控制的成员函数有些重要 – 对于所有数据成员公开的POD可以做什么?我真的看不到任何实际的用途.哈维宁说,即使我们有非会员的非朋友功能,封装也不会随着我们的需要而改变!会员功能与我们的对象进行交互.

那么为什么我 – 或其他任何人在这个问题上更喜欢非成员非会员功能的会员功能?当然,我们可以在已经存在的成员函数上写封包,这些函数可能按逻辑顺序排列,但这些都是.我在这里看不到任何复制的封装.

解决方法

迈尔斯没有说避免会员功能.他说,功能不应该是成员(或朋友),除非他们需要.显然,需要一些可以访问类的私有成员的功能,否则任何其他代码与类交互如何呢?

但是,可以访问类的私有成员的每个函数都与该类的私有实现细节相结合.应该是成员(或朋友)的功能是只能通过访问私人细节来有效实现的功能.这些是一个类的原始函数.非原始函数是可以在原始函数之上有效实现的那些函数.使非原始函数成员(或朋友)增加耦合到私有细节的代码量.

此外,在编写能够修改对象的私有成员的函数时,必须更加注意保持类不变量.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...