美文网首页程序员
虚函数和純虚函数

虚函数和純虚函数

作者: 平凡的鱼仔 | 来源:发表于2018-09-17 23:05 被阅读23次

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

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

純虚函数

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

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

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

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

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

相关文章

  • 虚函数和純虚函数

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

  • 纯虚函数和抽象类

    纯虚函数和抽象类 概念 纯虚函数:没有函数体的虚函数。 抽象类:包含纯虚函数的类就称为抽象类。 纯虚函数就是在函数...

  • 虚函数和纯虚函数

    虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数! 纯虚函...

  • 纯虚函数和虚函数

    1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract clas...

  • C++虚函数小结

    小例子 参考 虚函数用法 虚函数 理解虚函数

  • 08. 纯虚函数、抽象类、多继承、菱形继承、虚

    一.虚函数 二.纯虚函数 三,虚析构函数 四.纯虚函数 五,多继承 六.多继承-虚函数 七.菱形继承 八. 虚继承...

  • C++ 虚函数

    C++ 虚函数 虚函数 基类中使用virtual关键字声明的函数,称为虚函数。虚函数的实现,通过虚函数表来实现的。...

  • Part2_Week2(boolan)

    vptr和vtbl:如果类中包含虚函数,则其对象中包含一个虚指针,虚指针指向一个虚表,虚表指向虚函数的定义。虚函数...

  • 第二周(Geek Band)

    对象模型 1、vptr和vtbl(虚函数与虚表) 调用虚函数vfun,通过虚指针vptr找到虚表vtbl,通过虚表...

  • 构造函数和析构函数可以是虚函数吗

    构造函数不能是虚函数,析构函数可以且常常是虚函数。 构造函数不能是虚函数 存储空间角度虚函数的调用需要 vptr ...

网友评论

    本文标题:虚函数和純虚函数

    本文链接:https://www.haomeiwen.com/subject/lmlqnftx.html