博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective C++ 34 区分接口继承和实现继承
阅读量:4339 次
发布时间:2019-06-07

本文共 1165 字,大约阅读时间需要 3 分钟。

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的非虚函数,并应该遵循父类对该函数的实现方法。

 

转载于:https://www.cnblogs.com/bigbigtree/p/3965724.html

你可能感兴趣的文章
POJ 3267 The Cow Lexicon(动态规划)
查看>>
设计原理+设计模式
查看>>
tomcat 7服务器跨域问题解决
查看>>
前台实现ajax 需注意的地方
查看>>
Jenkins安装配置
查看>>
个人工作总结05(第二阶段)
查看>>
Java clone() 浅拷贝 深拷贝
查看>>
深入理解Java虚拟机&运行时数据区
查看>>
02-环境搭建
查看>>
spring第二冲刺阶段第七天
查看>>
搜索框键盘抬起事件2
查看>>
阿里百川SDK初始化失败 错误码是203
查看>>
透析Java本质-谁创建了对象,this是什么
查看>>
BFS和DFS的java实现
查看>>
关于jquery中prev()和next()的用法
查看>>
一、 kettle开发、上线常见问题以及防错规范步骤
查看>>
eclipse没有server选项
查看>>
CRC码计算及校验原理的最通俗诠释
查看>>
使用Gitbook来编写你的Api文档
查看>>
jquery扩展 $.fn
查看>>