编程语言
首页 > 编程语言> > [笔记]《Effective C++》第六章 Inheritance and Object-Oriented Design

[笔记]《Effective C++》第六章 Inheritance and Object-Oriented Design

作者:互联网

条款32:Make sure public inheritance models"is-a."

“public继承”意味is-a。适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derived class对象也都是一个base class对象

必须牢记:

条款33:Avoid hiding inherited names.

  1. derived classes内的名称会遮掩base classes内的名称。在public继承下从来没有人希望如此。
  2. 为了让被遮掩的名称再见天日,可使用using声明式转交函数(forwarding functions)。

条款34:Differentiate between inheritance of interface and inheritance of implementation.

条款35:Consider alternatives to virtual functions.

可以采用以下方法作为虚函数的替代:

条款36:Never redefine an inherited non-virtual function.

任何情况下都不该重新定义一个继承而来的non-virtual函数。

条款37:Never redefine a function's inherited default parameter value.

virtual函数系动态绑定(dynamically bound),而缺省参数值却是静态绑定(statically bound)

条款38:Model "has-a" or "is-implemented-in-terms-of" through composition.

条款39:Use private inheritance judiciously.

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

条款40:Use multiple inheritance judiciously.

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

virtual base classes(亦相当于对virtual继承)的忠告:

标签:Effective,Inheritance,继承,Object,derived,virtual,base,classes,class
来源: https://www.cnblogs.com/fusheng-chana/p/15305489.html