Effective C++ 阅读笔记 07:继承与面向对象设计(下)

条款36:绝不重载继承的non-virtual函数

请记住

  • 绝对不要重新定义继承而来的non-virtual函数。

我的理解

不要重载,如果需要重写函数请将父类函数声明为virtual类型。


条款37:绝不重定义继承而来的缺省参数

请记住

  • 绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定,而virtual函数——你唯一应该覆写的东西——却是动态绑定。

我的理解

差不多的道理,把上面一条更新下,如果需要重写函数请将父类函数声明为virtual类型。


条款38:通过复合塑膜出has-a或“根据某物实现出”

请记住

  • 复合(composition)的意义和public继承完全不同。
  • 在应用域(application domain),复合意味has-a(有一个)。在实现域(implementation domain),复合意味is-implemented-in-terms-of(根据某物实现出)。

我的理解

如果需要复合类型的关系,把需要实现的类,放在private里面是个好的主意


条款39:明智而审慎地使用private继承

请记住

  • Private继承意味 is-implemented-in-terms-of(根据某物实现出)。它通常比复合(composition)的级别低。但是当派生类需要访问protected 基类的成员,或需要重新定义继承而来的virtual函数时,这样的设计是合理的。
  • 和 复合 不同,private继承可以造成empty基类最优化。这对致力于”对象尺寸最小化“的程序库开发者而言,可能很重要。

我的理解

private继承同样属于一种复合形式,不同于前一种(将类放在private成员中),通过继承可以重新定义virtual函数,或者使用protected成员


条款40:明智而审慎地使用多重继承

请记住

  • 多重继承比单一继承复杂。它可能导致新的歧义性,以及对virtual继承的需要。
  • virtual继承会增加大小、速度、初始化(及赋值)复杂度等等成本。如果virtual base classes不带任何数据,将是最具使用价值的情况。
  • 多重继承的确有正当用途。其中一个情节涉及“public继承某个Interface class”和“private继承某个协助实现的class”的两项组合。

我的理解

少用多重继承,因为它会增加成本,或者增加错误出现的可能性


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值