Effective C++ 条款23 宁以non-member,non-friend替换member函数

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函数.

posted @ 2015-08-30 17:32  Reasno  阅读(351)  评论(0编辑  收藏  举报