6.继承与面向对象设计

来源:互联网 发布:中央网络电视台 编辑:程序博客网 时间:2024/05/16 05:33

Item32:Make sure public inheritance “is-a”.

Item33:Avoid hiding inherited names.

Item34:Differentiate between inheritance of interface and inheritance of implementation.

①纯虚函数:只继承接口(也可以在类外定义)让Derived class具体实现。
②虚函数:同时继承接口和实现,又希望DC覆写其实现。
③非虚函数:继承接口与实现,并且不允许覆写(否则覆盖其Base实现)

Item35:Consider alternatives to virtual functions.

①NVI(non-virtual interface)通过public non-virtual(virtual wrapper)间接调用virtal
②Strategy设计模式替换,具体实现通过调用对象来执行。

Item36:Never redefine an inherited non-virtual function.

Item37:Never redefine a functions’s inherited default parameter value.

不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定的,可通过NVI将缺省参数放入public non-virtual函数的参数列表来控制这种问题。

Item38:Model “has-a” or “is-implemented-in-terms-of” through composition.

复合:应用域即has-a有一个,在实现域上是根据某物而实现,如set有一个红黑树,它是根据红黑树而实现。

Item39:Use private inheritance judiciously.

仅需要重新定义继承而来的virtual函数时合理,一般可用复合替换

class B{};      class D:private B                {    private n;};sizeof(B)!=0;sizeof(int)==sizeof(D);           //(EBO)空白基类最优化

Item40:Use multiple inheritance judiciously.

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

0 0
原创粉丝点击