zoukankan      html  css  js  c++  java
  • C++ 虚函数表解析

    参考:http://blog.csdn.net/haoel/article/details/1948051

             虚函数表是一个类的虚函数地址表,在虚函数类的实例中,这个表被分配到了实例的内存中。

       C++编译器保证虚函数表的指针位于对象实例中最前面的位置,因此可以通过对象实例的地址

       得到这张虚函数表,然后遍历其中的函数指针,并调用相应的函数。下面分几种情况讨论(可参考

       上述博文,博主画了图,很清楚):

           1、单继承(无虚函数覆盖):

               在派生类的实例中,可以看到:虚函数按照声明顺序放于同一张表中,且父类的虚函数放于

          子类的虚函数之前。

           2、单继承(有虚数覆盖):

             在派生类的实例中,覆盖的函数放到了父类相应的函数的位置,没有被覆盖的函数依旧。

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

             在子类实例中,每个父类都有自己的虚表,且子类的虚函数放到了第一个虚表中。

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

            将父类相应虚函数的位置,皆换成子类相应的虚函数。

         

           补充:上面的内容缺少了虚继承的情况,下面是对其补充,不得不说,C++实在是太复杂了。

                     在虚继承的情况下,父类的虚函数不会与子类共用一个虚函数指针,并且子类还会再生成一个

              虚指针指向父类。

                     参考:http://blog.csdn.net/hxz_qlh/article/details/14633361          

       

  • 相关阅读:
    Excel2010表格里设置每页打印时都有表头
    新手常见Python运行时错误
    如何查看某个端口被谁占用
    ubuntu更换阿里源
    c# 值类型与引用类型(转)
    vs2015 企业版 专业版 密钥
    csdn中使用Git的一些注意问题
    在notepad++中快速插入当前时间方法
    EF6 code first 新建项目注意问题
    vs2015新建web应用程序空模板和添加webapi的模板生成文件的比较
  • 原文地址:https://www.cnblogs.com/573177885qq/p/5892963.html
Copyright © 2011-2022 走看看