您的位置:首页 > 其它

6.继承与面向对象设计

2016-03-12 21:39 309 查看

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不带任何数据,将是最具实用价值的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: