第六章 继承和面向对象设计 (Effective C++ Second Edition 读书笔记)

条款35: 使公有继承体现 "是一个" 的含义

注释:C++面向对象编程中一条重要的规则是:公有继承意味着 "是一个" 。

条款36: 区分接口继承和实现继承

1) 定义纯虚函数的目的在于,使派生类仅仅只是继承函数的接口。

2) 声明简单虚函数的目的在于,使派生类继承函数的接口和缺省实现。

3) 声明非虚函数的目的在于,使派生类继承函数的接口和强制性实现。

注释1:80-20定律:在一个典型的程序中,80%的运行时间都花在执行20%的代码上。

注释2:也就是说,80%的函数调用可以是虚函数,并且它们不会对程序的整体性能带来哪怕一丁点可以觉察到的影响。所以,在担心是否承担得起虚函数的开销之前,不妨将注意力集中在那20%会真正带来影响的代码上。

条款37: 决不要重新定义继承而来的非虚函数

评论:重新实现的同名函数,在基类里面都需要定义为虚函数。


条款38: 决不要重新定义继承而来的缺省参数值

注意:如果缺省参数值被动态绑定,编译器就必须想办法为虚函数在运行时确定合适的缺省值,这将比现在采用的在编译阶段确定缺省值的机制更慢更复杂。做出这种选择是想求得速度上的提高和实现上的简便,所以大家现在才能感受得到程序运行的高效;当然,如果忽视了本条款的建议,就会带来混乱。


条款39: 避免 "向下转换" 继承层次

评论:强制转换其实质是类型不匹配,而类型不匹配也就存在转换失败的风险。如果执行了强制转换,也就需要承担转换失败所带来的结果。


条款40: 通过分层来体现 "有一个" 或 "用...来实现"

注:公有继承的含义是 "是一个"。对应地,分层的含义是 "有一个" 或 "用...来实现",通过私有继承来实现。


条款41: 区分继承和模板

1) 当对象的类型不影响类中函数的行为时,就要使用模板来生成这样一组类。

2) 当对象的类型影响类中函数的行为时,就要使用继承来得到这样一组类。

评论:模板的使用将大大减轻重复的冗余编码劳动,在设计中要尽量考虑,将会抽象架构和流程设计。建议尽可能的使用,但分析一定要透彻。



条款42: 明智地使用私有继承

1) 私有继承意味着只是继承实现,接口会被忽略。

2) 广泛意义上来说,分层是应该优先采用的技术,所以只要有可能,就要尽量使用它。

评论:私有继承将基类的所有特性都封装到新类的内部,将不会对外呈现。


条款43: 明智地使用多继承

评论:尽量使用单继承,保持程序结构代码的简洁性。如果非要使用多继承,多继承基类之间必须是非相关的。


条款44: 说你想说的;理解你所说的

1) 共同的基类意味着共同的特性。

2) 公有继承意味着 "是一个"。

3) 私有继承意味着 "用...来实现"。

4) 分层意味着 "有一个" 或 "用...来实现"。


下面的对应关系只适用于公有继承的情况:

1) 纯虚函数意味着仅仅继承函数的接口。

2) 简单虚函数意味着继承函数的接口加上一个缺省实现。

3) 非虚函数意味着继承函数的接口加上一个强制实现。


第一章:从C转向C++ (Effective C++ Second Edition 读书笔记)

第二章:内存管理(Effective C++ Second Edition 读书笔记)

第三章:构造函数,析构函数和赋值操作(Effective C++ Second Edition 读书笔记)

第四章 类和函数:设计与声明(Effective C++ Second Edition 读书笔记) 

第五章 类和函数:实现(Effective C++ Second Edition 读书笔记)

第六章 继承和面向对象设计 (Effective C++ Second Edition 读书笔记)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值