【资料图】
宁以 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 关闭
资讯
- 每日看点!Effective C++ 第二十三条 Prefer non-member non friend functions to me
- 武大科考队员从南极发回新春祝福 每日看点
- 每日视讯:早就“阳康”了,为啥还咳个不停?是肺炎吗
- 深度|除夕夜,天空中有一盏警灯_环球要闻
- 一图读懂丨2022年河南省巩固拓展脱贫攻坚成果同乡村振兴有效衔接工作“成绩单” 全球今亮点
- 诺贝尔奖物理学奖_关于诺贝尔奖物理学奖的基本详情介绍
- 濮阳惠成(300481)2022年年报预告点评:风电和配电网有望驱动酸酐需求新一轮增长_世界通讯
- 全球信息:陈雨菲退赛!何冰娇2-0横扫华裔名将,晋级女单四强,成国羽独苗
科技
-
大山深处的书香春节2022-02-07
-
天津:男子涂改核酸证明进火车站被拘留2022-02-07
-
守护中国唯一国境“骑马线”的“护路人”:保证中欧班列冬季运输安全2022-02-07
-
降雪致青海多条高速实行交通管制2022-02-07
-
广州番禺部分区域被划定为疫情防控管理区2022-02-07