条款23:宁以no-member、no_friend替换member函数
来源:互联网 发布:淘宝官方下载电脑版 编辑:程序博客网 时间:2024/04/30 11:59
条款23:宁以no-member、no_friend替换member函数
书中提出一个例子:class表示网页浏览器,现在要写一个函数用来清除浏览器的高速缓存区、URLs、cookies。
class WebBrowser{public:void clearCache();void clearHistory();void removeCookies();};提供一个删除接口,统一调用这些函数,于是我们在类中新增一个member函数
class WebBrowser{public:void clearEverything(){this->clearCache();this->clearHistory();this->removeCookies();}};而这也可以通过non-member-and-non-friend函数替代
void clearBrowser(WebBrowser& wb){wb.clearCache();wb.clearHistory();wb.removeCookies();}在member function 和 no-member-no-friend function 中如何抉择呢?
面向对象守则要求数据应该尽可能被封装,member函数带来的封装型比non-member函数低。此外,提供non-member函数可允许对WebBrowser相关机能有较大的包裹弹性,而那最终导致较低的编译相依度,增加webBrowser的伸缩性,因此,在许多方面non-member做法比member做法好。
封装意味着不可见。愈多东西被封装,愈少人看到,愈大的弹性去变化,因为我们的改变仅仅直接影响到改变的那些人事物。愈多东西被封装,我们改变那些东西的能力就愈大。这就是我们推崇封装的原因:它使我们能够改变事物而只影响有限客户。
对应对象内的数据,俞少看到数据(访问它),俞多的数据可得到封装,我们就俞能自由改变对象的数据。
对应对象内的数据,俞少看到数据(访问它),俞多的数据可得到封装,我们就俞能自由改变对象的数据。
namespace
如何将类和no-member 函数整合在一起呢?我们的做法一般是将两者放在同一个namespace中。
namespace WebBrowserStuff{class WebBrowser{};void clearBrowser(WebBrowser& wb);}namespace的作用域可以跨越多个头文件,对于WebBrowser这样的类,应该存在很多便利的函数,即no-member-no-friend函数。为了降低编译关联性,可以将不同种类的函数定义在不同的头文件中,通过namespace实现。这样客户可以很轻松扩展这一组便利功能。
//webbrowser.hnamespace WebBrowserStuff{class WebBrowser{ //核心机能,例如几乎所有客户都需要的non-member函数。};void clearBrowser(WebBrowser& wb);}//webbrowserbookmark.hnamespace WebBrowserStuff{ //定义与书签相关的便利函数}//webbrowsercookies.hnamespace WebBrowserStuff{ //与cookie相关的便利函数}
记住
宁以non-member-and-non-friend函数替换member函数,这样做可以增加封装性,包裹性和机能扩充性。
0 0
- 条款23:宁以no-member、no_friend替换member函数
- 条款23:宁以non-member,non-friend替换member函数[?????????]
- 条款23:宁以non-member、non-friend替换member函数
- 条款23:宁以non-member、non-friend替换member函数
- 条款23:宁以non-member、non-frined替换member函数
- 《Effective C++》学习笔记条款23 宁以non-member、non-friend替换member函数
- Effective C++——》条款23:宁以non-member、non-frined替换member函数
- 条款23:宁以non-member、non-friend替换member函数
- Effective C++:条款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函数
- 《Effect C++》学习------条款23 :宁以non-member、non-friend替换member函数
- 读书笔记《Effective C++》条款23:宁以non-member、non-friend替换member函数
- 【effetive C++ 笔记 】条款23:宁以non-member, non-friend替换member函数
- 条款23:宁以non-member、non-friend替换member函数
- 条款23宁以non-member函数代替member函数
- 条款23:宁以non-memeber,non-friend替换member函数
- Kali Linux 安全渗透教程<第六更>1.4.2 安装至USB驱动器Kali Linux
- Android清理设备内存详细完整示例(一)
- Android MediaPlayer架构图解
- MySql安装后各种错误解决办法
- 细说C++覆盖方法和重载方法
- 条款23:宁以no-member、no_friend替换member函数
- jQuery移除元素自动解绑事件实现
- 点击返回键2次退出程序
- Javascript中Window.open参数详解
- Photoshop CS6新特性上手(一、二)
- Cocos2dx 学习记录 [2] 关于混合和高亮一些知识点的体会
- vim添加显示行号,自动缩进功能
- java基础详解之 构造方法详解
- linux下vi命令大全