C++之宁以non-member,non-friend替换member函数(23)---《Effecive C++》
来源:互联网 发布:盘点2016年网络流行语 编辑:程序博客网 时间:2024/05/16 14:59
条款23:宁以non-memebr、non-friend替换member函数
我们先来看看如下代码:
class WebBrowser{public: ... void clearCache(); void clearHistory(); void removeCookies(); ...};
如果我们想要清除浏览器中所有的Cache,cookie和history等,我们可以选择如下两种办法解决:
1)在class中声明一个mermber函数执行:
class WebBrowser{public: ... void clearEverything(); ...};
2)声明一个普通的non-member函数调用适当的member函数执行:
void clearBrowser(WebBrowser& wb){ wb.clearCache(); wb.clearHistory(); wb.removeCookies();}
这时候就有一个问题了,到底是member函数clearEverything还是non-member函数clearBrowser?
面向对象守则要求数据尽可能被封装,然而与直观相反地,member成员函数clearEverything的封装性比non-member成员函数的封装性低,同时,提供non-member成员函数可允许对WebBrowser相关技能有较大的弹性,因此很多方面我们选用non-member函数,下面我们来分析一下原因。
我们知道,关于封装,越少的函数可以访问类数据,那么类的封装性越好,如果在member函数和non-friend non-member成员函数之间做出选择的话,推荐使用non-friend non-member函数,因为它并不增加“能够访问class内中private成分”的函数数量,具有更大的封装性,注意这里是member成员函数和non-member non-friend函数之间选择;
注意:这里我们需要注意为了封装性而让函数“成为class的non-member”,并不意味这它“不可以是另一个class的member”,例如我们可以令clearBrowser成为某工具类的一个static member函数,只要他不是WebBrowser的一部分(或者其friend),就不会影响WebBrowser的private成员封装性。
更普遍的做法是让clearBrowser成为一个non-member函数并且位于WebBrowser所在的同一个namespace内,这样可以带来很多好处,例如namespace可以跨越多个源码文件而class不能。在C++中我们通常将这些辅助函数凡在多个头文件内但隶属与同一个命名空间,意味着客户可以轻松扩展这一组辅助函数,只需添加更多non-member non-friend函数到这个命名空间即可。
nameSspace WebBrowserStuff{ class WebBrowser{...}; void clearBrowser(WebBrowser& wb);}
总结:
宁可拿non-member non-friend函数替换member函数,这样可以增加封装性、可扩展性,具有很大的优势!
- C++之宁以non-member,non-friend替换member函数(23)---《Effecive C++》
- 《Effective C++》学习笔记条款23 宁以non-member、non-friend替换member函数
- Effective C++:条款23:宁以non-member、non-friend替换member函数
- 《Effect C++》学习------条款23 :宁以non-member、non-friend替换member函数
- 读书笔记《Effective C++》条款23:宁以non-member、non-friend替换member函数
- 宁以non-member、non-friend替换member函数
- 宁以non-member且non-friend替换member函数
- item23: 宁以non-member、non-friend替换member(或者friend)函数
- Effective C++——》条款23:宁以non-member、non-frined替换member函数
- 条款23:宁以non-member,non-friend替换member函数[?????????]
- 条款23:宁以non-member、non-friend替换member函数
- 条款23:宁以non-member、non-friend替换member函数
- Effective C++ Item 23 宁以non-member、non-friend替换member函数
- 条款23:宁以non-member、non-friend替换member函数
- Effective C++ 读书笔记 条款23:宁以non-member、non-friend 替换 member 函数
- 条款23 宁以non-member、non-friend替换member函数
- 条款23:宁以non-member,non-friend 替换member函数
- 【effetive C++ 笔记 】条款23:宁以non-member, non-friend替换member函数
- CString 转 char*
- 动态规划——Dining Cows
- 为啥我们要学习Linux
- 20170724进一步深入Makefile
- tomcat8使用log4j分割日志的流程
- C++之宁以non-member,non-friend替换member函数(23)---《Effecive C++》
- 四旋翼飞行器结构和原理
- java常见证书类型和密钥库类型
- 后向传播算法“backpropragation”详解
- 使用VMware虚拟机在win10安装Ubuntu16.04
- c#委托
- Linux:GDB调试
- Spring笔记02-Spring容器
- bash 移动光标