微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

解决方法

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

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

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

原文地址:https://www.jb51.cc/c/112121.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐