Effective C++读书笔记(15)

条款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成员时才考虑。(封装性)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值