Effective C++ 条款23 宁以non-member,non-friend替换member函数
2015-08-30 17:32
417 查看
1. 面向对象的真实意义并非是数据以及操作数据的函数应该被捆绑在一起,而是要求数据应该尽可能地被封装.封装意味着数据的不可见,越多的东西被封装,用户对其直接的接触就越少,用户代码和被封装内容的编译相关度就越低,"包裹弹性"就越高,也就是说,封装性越好,对代码的更改所造成的影响就越低.
2. non-member-non-friend函数实际上比public-member和friend函数要高,因为前者无法访问类的private对象,而后者可以访问类的任何对象,这显然降低了数据的封装性(当然,出于封装性的考虑让函数成为类的non-member并不意味着它不可以是其他类的member).
3. 如果non-member函数之间并没有编译相依关系,那么可以通过把它们声明在同一命名空间不同头文件的方式把它们分离开来.将函数放在多个头文件但隶属于同一命名空间可以使客户轻松地扩展这一组函数,只需要添加更多non-member-non-friend到同一命名空间即可.但member函数却不可以,因为类必须整体定义而不能分割为片片段段,因此就"机能扩充性而言",non-member-non-friend函数同样由于member函数.
2. non-member-non-friend函数实际上比public-member和friend函数要高,因为前者无法访问类的private对象,而后者可以访问类的任何对象,这显然降低了数据的封装性(当然,出于封装性的考虑让函数成为类的non-member并不意味着它不可以是其他类的member).
3. 如果non-member函数之间并没有编译相依关系,那么可以通过把它们声明在同一命名空间不同头文件的方式把它们分离开来.将函数放在多个头文件但隶属于同一命名空间可以使客户轻松地扩展这一组函数,只需要添加更多non-member-non-friend到同一命名空间即可.但member函数却不可以,因为类必须整体定义而不能分割为片片段段,因此就"机能扩充性而言",non-member-non-friend函数同样由于member函数.
相关文章推荐
- 【C/C++学院】0729-语音识别/Const关键字/字符串应用/内存分配以及处理海量数据
- C语言查看程序运行的时间
- 详解C语言中freopen()函数和fclose()函数的用法
- 《高质量的C/C++编程指南》读书笔记
- C++标准库类型string
- 一起talk C栗子吧(第四十五回:C语言实例--深度优先遍历二)
- C语言中的文本流与二进制流的区别
- C99标准支持结构体按成员名称进行指定初始化。
- C字符串函数的典型实现
- 【c++学习笔记】类Ⅰ
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- C++ 强制类型转换
- C++内存管理
- C++学习笔记(五)标准模板库STL
- 对比C语言中的setbuf()函数和setvbuf()函数的使用
- vc++ DLL开发小结
- 顺序表基本操作的代码实现:C++实现
- 【基础知识】C++指针知识
- 详解C++右值引用
- [leetcode]Ugly Number C语言