所谓接口继承,就是派生类只继承函数的接口,也就是声明;而实现继承,就是派生类同时继承函数的接口和实现。
我们都很清楚C++中有几个基本的概念,虚函数、纯虚函数、非虚函数。
虚函数:
虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。——MSDN
虚函数用来表现基类和派生类的成员函数之间的一种关系.
虚函数的定义在基类中进行,在需要定义为虚函数的成员函数的声明前冠以关键字 virtual.
基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义.
在派生类中重新定义时,其函数原型,包括返回类型,函数名,参数个数,参数类型及参数的先后顺序,都必须与基类中的原型完全相同.
虚函数是重载的一种表现形式,是一种动态的重载方式.
纯虚函数:
纯虚函数在基类中没有定义,它们被初始化为0。
任何用纯虚函数派生的类,都要自己提供该函数的具体实现。
定义纯虚函数
virtual void fun(void) = 0;
非虚函数:
一般成员函数,无virtual关键字修饰。至于为什么要定义这些函数,我们可以将虚函数、纯虚函数和非虚函数的功能与接口继承与实现继承联系起来:
声明一个纯虚函数(pure virtual)的目的是为了让派生类只继承函数接口,也就是上面说的接口继承。
纯虚函数一般是在不方便具体实现此函数的情况下使用。也就是说基类无法为继承类规定一个统一的缺省操作,但继承类又必须含有这个函数接口,并对其分别实现。但是,在C++中,我们是可以为纯虚函数提供定义的,只不过这种定义对继承类来说没有特定的意义。因为继承类仍然要根据各自需要实现函数。
通俗说,纯虚函数就是要求其继承类必须含有该函数接口,并对其进行实现。是对继承类的一种接口实现要求,但并不提供缺省操作,各个继承类必须分别实现自己的操作。
声明非纯虚函数(impure virtual)的目的是让继承类继承该函数的接口和缺省实现。
与纯虚函数唯一的不同就是其为继承类提供了缺省操作,继承类可以不实现自己的操作而采用基类提供的默认操作。
声明非虚函数(non-virtual)的目的是为了令继承类继承函数接口及一份强制性实现。
相对于虚函数来说,非虚函数对继承类要求的更为严格,继承类不仅要继承函数接口,而且也要继承函数实现。也就是为继承类定义了一种行为。总结:
纯虚函数:要求继承类必须含有某个接口,并对接口函数实现。
虚函数:继承类必须含有某个接口,可以自己实现,也可以不实现,而采用基类定义的缺省实现。
非虚函数:继承类必须含有某个接口,必须使用基类的实现。我很久就听到这个名词了,原来是这么回事,我们的plug就是典型的接口继承
struct I_A
{virtual void fun() = 0;
};class A : public I_A
{    public:void fun();
};
void A::fun()
{}对于虚函数就是为了多态的实现,如果你不重写虚函数,虚函数将变得毫无意义,还不如定义一般的函数,还省了一个指针的内存空间

转载于:https://www.cnblogs.com/zzyoucan/p/4034586.html

c++ 接口继承和实现继承相关推荐

  1. 25接口之间的单继承

    Demo01Relations.java package Relations; /* * 1.类与类之间是单继承的.直接父类只有一个. * 2.类与接口是多实现的.一个类可以实现多个接口. * 3.接 ...

  2. java父类转子类_java中什么是继承,和继承的接口的关系?

    继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父 ...

  3. [EffectiveC++]item34:区分接口继承和实现继承

    [EffectiveC++]item34:区分接口继承和实现继承 转载于:https://www.cnblogs.com/jeanschen/p/3363569.html

  4. java接口构建英雄属性_Python接口类的多继承以及抽象类的单继承

    一.接口类(面向对象开发的思想和规范)的多继承 需求: 定义一个tiger类:会走,会游 定义一个hawk类:会走,会飞 定义一个swan类:会走,会游,会飞 (a)如果像以下代码的方式,则不能够满足 ...

  5. 接口和抽象类是否继承了Object

    我们先看一下Java的帮助文档对于Object的描述: Class Object is the root of the class hierarchy. Every class has Object ...

  6. 面向对象的故事~数据底层操作告诉了我们接口,抽象类,继承与多态性的使用~续(TestBase继承ITest是多余的?)...

    在我上一篇文章发表后,收到了很多博友的回复,其中有一位博友提了一个问题,TestBase 继承了ITest是多余的,我认为,我有必要再写一篇文章来说明一下,TestBase为什么要继承ITest,当然 ...

  7. java接口类支持多继承

    一个类只能extends一个父类,只能有一个父类,但可以implements多个接口.java通过使用接口的概念来取代C++中多继承.与此同时,一个接口则可以同时extends多个接口,却不能impl ...

  8. java接口+Java支持多继承吗?

    java接口+Java支持多继承吗? 1.接口使用interface(接口)关键字修饰 2.接口中的方法默认都是全局抽象方法,即默认public abstract修饰 3.接口不能直接new对象,必须 ...

  9. 接口可以继承抽象类吗_Python接口类的多继承以及抽象类的单继承

    一.接口类(面向对象开发的思想和规范)的多继承 需求: 定义一个tiger类:会走,会游 定义一个hawk类:会走,会飞 定义一个swan类:会走,会游,会飞 (a)如果像以下代码的方式,则不能够满足 ...

  10. 9-2:C++多态之纯虚函数和抽象类以及接口继承和实现继承

    文章目录 (1)纯虚函数和抽象类的概念 (2)抽象类的意义 (3)接口继承与实现继承 (1)纯虚函数和抽象类的概念 如果一个类的虚函数后面写上=0,同时不写它的实现,那么这样的虚函数称之为纯虚函数,包 ...

最新文章

  1. python中list作为全局变量无需global声明的原因
  2. 第一次使用MsChart运行提示:ChartImg.axd 执行子请求时出错。
  3. 内网java发送邮件_基于JavaMail的Java邮件发送:简单邮件发送
  4. Linux-locate/slocate命令
  5. Android之webview长按超链接类型获取链接文字及url、长按图片链接类型分别获取图片和链接的url
  6. 前端学习(2452):封装数据接口
  7. php用不了for循环吗,php中的这两个for循环有什么区别吗?
  8. ORM(手写简单ORM)
  9. 【BZOJ5457】城市(线段树合并)
  10. 互联网公司分批返岗;Safari 将封杀超过398天的 HTTPS 证书;TypeScript 3.8 发布 | 极客头条...
  11. 9. explain
  12. 征信报告 加密文档_Secret Folder for Mac(文件加密隐藏软件)
  13. 关于小米历史官方刷机包
  14. CentOS 8 Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist
  15. 【HTM】层级实时记忆脑皮质学习算法 一、当前进度
  16. Oracle 数据统计计算
  17. Javascript迭代、迭代、穷举、递归常用算法
  18. “顾客至上,服务至上”??
  19. 如何使用 Lightly 进行 Python GUI 项目开发
  20. C++元编程实现数组全排列

热门文章

  1. js sdk demo java_微信JS-SDK DEMO页面和示例代码
  2. java 变量 类之间调用_java内部类与其他类变量之间的调用方式
  3. 算法:91. 解码方法
  4. 算法:分离链表为两部分,小于某个值都在左边,大于等于某个值在右边 Partition List
  5. clone,Duplicate复制target XCode iOS
  6. 算法:获取链表的中间值Middle of the Linked List
  7. Mac大文件分包split与合并cat,加密压缩zip
  8. mysql手动编译安装_手动编译安装Mysql
  9. win10 tensorflow 和numpy兼容性问题 No module named ‘numpy.core._multiarray_umath‘
  10. pymysql执行有参数的in语句