Item 23 多考虑“非成员、非友元”函数
来源:互联网 发布:淘宝客服聊天表情包 编辑:程序博客网 时间:2024/05/17 09:36
为了提供一站式服务,定义一个“清除一切”的函数。下面是两种方案:
1> 成员函数
2> 非成员、非友元函数
这两种方式哪种更好?这要从面向对象的根本谈起。
所谓面向对象,并不是把操作和数据搞到类里越多,才是好的封装。封装,是针对数据来说的。
上面的成员函数,其实对数据的封装不算好。那个非成员非友元的“双非”函数,才是封装的较好的。不仅如此,它还为WebBrowser提供了更好的扩展性,减少了编译依赖。
先说封装。封装的越多,客户看见的就越少,从而程序员就有更多的空间去修改。
再说对象内部的数据。某个数据被访问的越少,被封装的就越完全,程序员也就有越多的修改权。
若数据声明为公有或protected,则有无穷多的函数访问它,就是无封装。
私有的成员,只有成员函数、友元函数可以访问。
第一种方法定义为成员函数,增加了访问次数,相当于减弱了封装。反之,双非函数是好封装。不过,可以把clearBrowser放到别的类里。那样做不算破坏WebBrowser的封装。
另外,像WebBrowser这样的类可能有很多“便利函数”,比如为书签、打印等工作提供快捷调用的函数。常见的作法是:
所有的便利函数,都在WebBrowserStuff这个名字空间里。
STL就是这样组织的。
- Item 23 多考虑“非成员、非友元”函数
- 读书笔记 effective c++ Item 23 宁可使用非成员非友元函数函数也不使用成员函数
- 读书笔记 effective c++ Item 23 宁可使用非成员非友元函数函数也不使用成员函数
- Item 23:非成员非友元函数好于成员函数 Effective C++笔记
- Effective c++之Item 23: 用非成员非友元函数取代成员函数
- [翻译] Effective C++, 3rd Edition, Item 23: 用 non-member non-friend functions(非成员非友元函数)取代 member functions(成员函数)
- Item 36 非虚拟的成员函数不能重定义
- 尽量使用非成员非友元函数,而不是成员函数
- C++箴言:用非成员非友元函数取代成员函数
- Effective C++ Item 46 需要类型转换时请为模板定义非成员函数
- Item 24:用非成员函数来支持所有元的类型转换 Effective C++笔记
- Item 46:需要类型转换时,应当在类模板中定义非成员函数
- Item 45 成员函数模板
- 非成员函数、成员函数区别
- Java面向对象 多态动态绑定(非静态成员函数、成员变量、静态成员函数)
- Effective c++之Item 24: 当类型转换应该用于所有参数时,声明为非成员函数
- [C++]尽量用非成员函数,非友元函数替换成员函数
- 静态成员函数引用非静态成员
- H.264 Profiles and Levels
- Item 19 类的设计
- Item 20 传引用的好处
- time 模块
- Note
- Item 23 多考虑“非成员、非友元”函数
- python3 urllib.request
- MyEclipse 8.6下安装配置Extjs插件
- Have a fun
- Item 35 考虑虚函数的替代者
- C#虚方法和抽象方法
- Lucene和Nutch的文章荟萃
- fl2440文件系统的制作
- Item 37 子类不能修改成员函数的默认参数值