Effective C++ 34 区分接口继承和实现继承
来源:互联网 发布:淘宝优惠券设置到首页 编辑:程序博客网 时间:2024/05/29 04:55
public继承从根本上讲,有两部分:接口继承和实现继承。两者之前的区别很像函数声明与函数定义。
具体设计中,会呈现三种形式:derived class只继承成员函数的接口(纯虚函数);derived class同时继承函数的接口和实现,同时能够重写(override);derived class同时继承函数的接口和实现,但是不允许重写该函数。
1、只继承成员函数的接口(纯虚函数):
例如pure函数
2、同时继承函数的接口和实现,同时能够重写(override):
例如impure函数,为了避免用户不想使用默认实现,但同时忘记重写该函数的情况发生,书中给出一种很nice的解决方案:声明为纯虚函数,但是给定默认实现,如果想用父类的默认实现,需要显示调用,如果不想用默认声明,需要自己定义。
下面例子中的fly函数:
1 class Airplane { 2 public: 3 virtual void fly(const Airport& destination) = 0; 4 ... 5 }; 6 void Airplane::fly(const Airport& destination) 7 { 8 飞机飞往某一目的地的缺省代码 9 }10 class ModelA: public Airplane {11 public:12 virtual void fly(const Airport& destination)13 { Airplane::fly(destination); }14 ...15 };16 class ModelB: public Airplane {17 public:18 virtual void fly(const Airport& destination)19 { Airplane::fly(destination); }20 ...21 };22 class ModelC: public Airplane {23 public:24 virtual void fly(const Airport& destination);25 ...26 };27 void ModelC::fly(const Airport& destination)28 {29 ModelC飞往某一目的地的代码30 }
3、同时继承函数的接口和实现,但是不允许重写该函数:
例如non-virtual函数,这种实现方法强调不变性,即所有derived class 都应该继承base class的非虚函数,并应该遵循父类对该函数的实现方法。
0 0
- [effective c++]条款34-区分接口继承和实现继承
- Effective C++:条款34:区分接口继承和实现继承
- 《Effective C++》:条款34:区分接口继承和实现继承
- 区分接口继承和实现继承(Effective C++_34)
- Effective C++ 条款34 区分接口继承和实现继承
- Effective C++ 34 区分接口继承和实现继承
- 读书笔记《Effective C++》条款34:区分接口继承和实现继承
- C++之区分接口继承和实现继承(34)---《Effective C++》
- effective c++ 条款36: 区分接口继承和实现继承
- Effective C++ Item 34 区分接口继承与实现继承
- Item 34:区分接口继承和实现继承 Effective C++笔记
- 《Effective C++读书笔记》--条款34:区分接口继承和实现继承
- 区分接口继承和实现继承
- item34: 区分接口继承和实现继承
- 区分接口继承和实现继承
- [翻译] Effective C++, 3rd Edition, Item 34: 区分 inheritance of interface(接口继承)和 inheritance of implementation(实现继承)(上)
- [翻译] Effective C++, 3rd Edition, Item 34: 区分 inheritance of interface(接口继承)和 inheritance of implementation(实现继承)(下)
- 《Effective C++》读书笔记之item34:区分接口继承与实现继承
- 剑指offer chapter 4
- [转载]which、whereis、locate、find 命令用法
- iPhone iPad 各种控件默认高度
- gpiolib的调用过程分析
- Apache解析PHP
- Effective C++ 34 区分接口继承和实现继承
- 哈希冲突
- 看看,骗子多虚弱,人身攻击,无所不能
- 关于C++中如何判断文件,目录存在的若干方法
- 找出坐标集中的最远距离及其坐标
- JavaScript实现的9大排序算法
- 进阿飞抵抗力加客服
- 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
- 解决Visual SVN在linux下不能访问的问题