每日看点!Effective C++ 第二十三条 Prefer non-member non friend functions to me
【资料图】
宁以 non-member non-friend 函数替换 member 函数
下面有实例,三个对浏览器的操作
现在需要一个函数合并三个操作,有两种选择,一种是 member 另一种是 non-member non-friend
前面学过,面向对象守则要求数据应该尽可能被封装,如果使用 member 函数 clearEverything 那么封装度其实低于 non-member non-friend 函数 clearBrowser。non-member non-friend 函数的编译相联度更低,越多的内容被封装,能被看见的东西就越少,我们就能够越自由的改变内容(由条款22可知)。member 函数可以使用 private 函数、enums、typedefs,但是 non-member non-friend 函数就不能,二者提供的功能相同,non-member non-friend 不会增加 class 内 private 成分的函数数量,所以 non-member non-friend 使得 WebBrowser 具有更好的封装性。这点要区分清楚,non-member non-friend 而不是 non-member ,因为 friend 函数同 private 函数一样可以调用 private 函数、enums、typedefs,不能增加封装性。
使用 non-member non-friend 还有一个好处,可以降低编译相依关系,比如本案例中三个函数,我只需要使用其中一个,但是 class 中的函数会整体定义,无法分割。non-member non-friend 可以按照如下方式分割:
可以按照 namespace 分离到三个文件,假如我只需要使用 cookie 的内容,我就只需要包含file 1 和 file 2 头文件,不需要包含 file 3. STL 标准库就是如此,我不需要 list 我就不 #include <list>, 我需要 vector 我就 #include <vector> , 二者都在 std 空间下,可以做到分离使用。因此,class 的使用对于客户来说不可拓展,即使客户能够通过继承来产生 Derived,但是无法访问 Base 中被 private 修饰的成员,扩展性就差了许多。
广告
X 关闭
X 关闭
-
-
京张高铁每日开行17对冬奥列车
京张高铁每日开行17对冬奥列车 预计冬奥服务保障期运送运动员、技术官员、持票观众等20万人次 2月6日,2022北京新闻中心举行“北
-
-
北京冬奥会开幕式上 小学生朱德恩深情演绎《我和我的祖国》
北京冬奥会开幕式上 小学生朱德恩深情演绎《我和我的祖国》 9岁小号手苦练悬臂吹响颂歌 2月4日晚,在北京冬奥会开幕式上,9岁的
-
-
2022北京冬奥会开幕式这19首乐曲串烧不简单
多名指挥家列曲目单 再由作曲家重新编曲 本报专访冬奥开幕式音乐总监赵麟 开幕式这19首乐曲串烧不简单 “二十四节气”倒计时、
-
-
“一墩难求” 冰墩墩引爆购买潮
设计师:没想到冰墩墩成爆款一墩难求冰墩墩引爆购买潮 北京冬奥组委:会源源不断供货北京冬奥会吉祥物冰墩墩近日引爆购买潮,导致一墩难求