Effective C++学习笔记(六)

继承与面向对象设计

条款三十二 确定你的public继承是一个is-a的关系

  • public继承,是一个is-a的关系。因为基类身上的每一件事情一定也适用于继承类身上,因为每一个继承类对象也是一个基类对象。

条款三十三 避免遮掩继承而来的名称

  • 名字是什么?一朵玫瑰叫任何名字还是一样芬芳。

  • 子类内的名称会遮掩父类内的名称。

条款三十四 区分接口继承和实现继承

  • 声明一个纯虚函数(virtual func() = 0)的目的是为了让子类只继承函数接口

  • 声明非纯虚函数(virtual func())的目的,是让子类继承该函数的接口,并缺省实现。

  • 声明non-virtual函数的目的是为了让子类继承函数的接口以及一份强制性实现

条款三十五 考虑virtual函数以外的其他选择

条款三十六 绝不重新定义继承而来的non-virtual函数

  • 动态绑定(virtual)和静态绑定(non-virtual)的区别

条款三十七 绝不重新定义继承而来的缺省参数值

  • 动态绑定(virtual)和静态绑定(non-virtual)的区别

条款三十八 通过复合塑模出has-a或“根据某物实现出”

  • 复合,是类型之间的一种关系,当某种类型的对象内含有其他类型的对象,便是这种关系。

条款三十九 明智而谨慎使用private继承

  • 尽可能使用复合,必要时使用private

条款四十 明智而谨慎使用多重继承

  • 多重继承比单一继承复杂,可能导致新的歧义

  • virtual继承会增加大小、速度、初始化、赋值等成本,如果是virtual base class不带任何数据,将是最有实用价值的情况

原文地址:https://www.cnblogs.com/whutao/p/10869753.html