虚函数和純虚函数

定义一个函数为虚函数,不代表这个函数时不被实现(实例化)的函数;定义它为虚函数,是为了允许用指向基类的指针来调用子类的这个函数(重定义的虚函数),定义一个函数为純虚函数才代表函没有被实现(实例化)。

c++运行时的多态性是通过虚函数实现的,虚函数虚在“推迟联编”或者“动态联编”,虚函数并不是在编译的时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类还是某一个派生类的函数,所以被称为虚函数。可以通俗地理解为虚函数可以给我们提供多项选择而不是单选。虚函数通过指针引用来实现多态的效果

純虚函数

在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法(重定义)。

純虚函数引入的原因(主要从“虚”和“纯”两个角度分析):

1.方便使用多态性,我们常常在基类中定义虚函数
2.在很多时候,基类本身实例化是没有意义的。车类作为基类时,可以派生出私家车类、货车类、巴士类、三轮车类、火车类、摩托车类、电动车类、自行车类等等。车类这个概念太广太抽象,很难与具体的事物联系起来,实例化不合常理,而子类相对来说是具体的,私家车用来载人,货车用来载物,各自有各自的功能,容易和现实联系起来。如果你实例了一个车类,车可以载人也可以载货物,也可以用来骑,那这车就过于复杂了,这样类就失去了意义。简单来说,类是为了化繁为简。

为了解决1和2两个问题,引入了純虚函数的概念,将函数定义为純虚函数,则编译器会要求在派生类中必须重写以实现多态性。含有純虚函数的类是一个抽象类,抽象类不能实例化。在基类中声明純虚函数就是为了告诉子类,我没有具体的内容,你必须提供純虚函数的实现,重写函数以实现自己想要的功能。

想要了解抽象类,点击抽象类

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.C和C++的区别?C++的特性?面向对象编程的好处? 答:c++在c的基础上增添类,C是一个结构化语言,它的重...
    杰伦哎呦哎呦阅读 10,085评论 0 45
  • C++虚函数 C++虚函数是多态性实现的重要方式,当某个虚函数通过指针或者引用调用时,编译器产生的代码直到运行时才...
    小白将阅读 1,837评论 4 19
  • 亲爱的老婆,今天我同事聚会,喝了点小酒,你说我肝本来不好让我少喝点酒,我说我知道自己的身体,让你放宽心,有你惦...
    钱秋锋阅读 111评论 0 4
  • [转]暴雪创始人暴雪游戏研发的10个核心理念 原文链接:http://www.gamelook.com.cn/20...
    babybus_break阅读 1,166评论 0 2

友情链接更多精彩内容