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不带任何数据,将是最具实用价值的情况。相关文章推荐
- 1007-蚂蚁感冒
- 动态规划 HDU 1466 计算直线的交点数
- 最短路算法 :Bellman-ford算法 & Dijkstra算法 & floyd算法 & SPFA算法详解&BFS
- C#,WPF重载tabCotrol显示部分或tabItem部分
- 为什么EIA/RS422不能进行多点通信呢?
- 【LeetCode】66. Plus One
- 数据取证中对磁盘结构和工作原理的记录
- TCP的流量控制与拥塞控制
- AlphaGo开源代码
- 第二周作业
- 0312复利计算程序
- 2.bgrewriteaof问题
- 【操作系统】 存储管理
- 第一章-熟悉Objective-C
- Android开发qq一键登录成功返回数据的要方法
- Java中有效值位数控制
- 物理地址扩展PAE
- 获得栈的任一位置的元素并删除 不破坏栈的结构
- linux下gdb调试器使用学习-01
- css3:animation