Effective C++读书笔记(15)
来源:互联网 发布:c foreach 遍历数组 编辑:程序博客网 时间:2024/06/06 09:28
条款23:宁以non-member、non-friend替换member函数
对类里面的便利函数(不是完成某一特定功能,只是通过调用其他方法整合方法)在既可以选择成为member函数和non-member、non-friend函数的时候一般定义为non-member、non-friend函数更合理。因为member函数比non-member、non-friend函数的封装性差(因为member函数可以访问private成员,但是non-member、non-friend函数不没有增加能够访问private成员的函数数量)
封装性:如果某些东西被封装,他就不再可见。越多东西被封装,越少人可以看见他。而越少人看见他,我们就有越大的弹性去改变它,因为我们的改变仅仅影响看到改变的那些人事物。因此,越多东西被封装,我们改变那些东西的能力也就越大。
将所有的便利函数根据类别放在多个头文件内但隶属于同一个命名空间,而客户可以扩展便利函数。
命名空间:命名空间为防止名字冲突提供了更加可控的机制。命名空间能够划分全局命名空间。一个命名空间是一个作用域,通过在命名空间内定义名字可避免全局名字固有的限制。
1、命名空间的名字在定义该命名空间的作用域中必须是唯一的。命名空间可以在全局作用域或其他作用域内部定义,但不能在函数或类内部定义,可以在命名空间内放入可以出现在全局作用域的任意声明。
命名空间可以在几个部分中定义。命名空间由它的分离定义的部分的总和构成,命名空间是累积的(名字在声明名字的文件中可见的限制仍继续应用)
可以实现接口和实现分离。
2、嵌套命名空间:遵循常规规则:外围命名空间中声明的名字被嵌套命名空间中同一名字的声明所屏蔽。
3、未命名的命名空间:未命名的命名空间可以在给定文件中不连续,但不能跨越多个文件,用于声明局部于文件的实体。
条款24:若所有参数皆需类型转换,请为此采用non-member函数
如果你需要为某个函数的所有参数(包括被this指针所指的那个隐喻参数)进行隐式类型转换,那么这个函数应为non-member函数。(这个参数的类型要支持隐式转换,它的单参数构造函数是non-explicit或者重载类型转换符)
只有参数被列于参数列表中,这个参数才是隐式类型转换的合格参与者,当其未出现在参数列表中时将不会支持隐式类型转换。
不能够只因函数不该成为member函数就自动让它成为friend函数,仅当其需要访问private成员时才考虑。(封装性)
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- 《Effective c++》读书笔记
- 《more effective c++》读书笔记
- <<effective c++>> 读书笔记
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- Effective C++(1)读书笔记
- Effective C++(2)读书笔记
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- 《effective c++》读书笔记【一】
- 《effective c++》读书笔记1
- 《effective c++》读书笔记2
- 《effective c++》读书笔记3
- 《effective c++》读书笔记4
- 《effective C++》读书笔记
- Effective C++-读书笔记
- 802.1X
- 《黑客与画家》读书笔记
- hdu2874 LCA求森林中任意两节点的距离
- N*N皇后问题
- redis--设置redis的dbIndex方法
- Effective C++读书笔记(15)
- iOS第三方开源库的吐槽和备忘
- (NIDS)网络入侵检测函数接口说明
- matlab 初学
- Struts2 Action中传List值到jsp页面
- 设置SQLSERVER的混合身份验证模式(SA账号)
- CGLIB --操作字节码
- 试听广州传智播客.Net课程培训,我做决定了!
- 认识(大端--小端)端模式