zoukankan      html  css  js  c++  java
  • 虚函数表2

    1、多重继承(无虚函数覆盖)

     下面,再让我们来看看多重继承中的情况,假设有下面这样一个类的继承关系。注意:子类并没有覆盖父类的函数。

     

    对于子类实例中的虚函数表,是下面这个样子:

     

    我们可以看到:

    1)  每个父类都有自己的虚表。

    2)  子类的成员函数被放到了第一个父类的表中。(所谓的第一个父类是按照声明顺序来判断的)

     

    这样做就是为了解决不同的父类类型的指针指向同一个子类实例,而能够调用到实际的函数。

     2、多重继承(有虚函数覆盖)

     

    下面我们再来看看,如果发生虚函数覆盖的情况。

    下图中,我们在子类中覆盖了父类的f()函数。

     

    下面是对于子类实例中的虚函数表的图:

     

    我们可以看见,三个父类虚函数表中的f()的位置被替换成了子类的函数指针。这样,我们就可以任一静态类型的父类来指向子类,并调用子类的f()了。如:

     

                Derive d;

                Base1 *b1 = &d;

                Base2 *b2 = &d;

                Base3 *b3 = &d;

                b1->f(); //Derive::f()

                b2->f(); //Derive::f()

                b3->f(); //Derive::f()

                b1->g(); //Base1::g()

                b2->g(); //Base2::g()

                b3->g(); //Base3::g()

  • 相关阅读:
    jquery的y一些实用方法
    关于windows cmd 控制台输出中文
    大数据平台数据治理与建设方案
    django+easyui
    pyecharts 学习使用网址
    林业信息化整理 什么是林业信息化及如何进行林业信息化
    django 批量提交
    基于leaflet地图可视化(一)
    FastAPI 学习手册
    Python学习手册
  • 原文地址:https://www.cnblogs.com/zzj2/p/3013336.html
Copyright © 2011-2022 走看看