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

    1.虚函数表是全局共享的元素,即全局仅有一个.

    2.虚函数表类似一个数组,类对象中存储vptr指针,指向虚函数表.即虚函数表不是函数,不是程序代码,不肯能存储在代码段.

    3.虚函数表存储虚函数的地址,即虚函数表的元素是指向类成员函数的指针,而类中虚函数的个数在编译时期可以确定,即虚函数表的大小可以确定,即大小是在编译时期确定的,不必动态分配内存空间存储虚函数表,所以不再堆中.

      

      简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。如:

    其中:

      B的虚函数表中存放着B::foo和B::bar两个函数指针。

      D的虚函数表中存放的既有继承自B的虚函数B::foo,又有重写(override)了基类虚函数B::bar的D::bar,还有新增的虚函数D::quz。

    虚函数表构造过程:

    从编译器的角度来说,B的虚函数表很好构造,D的虚函数表构造过程相对复杂。下面给出了构造D的虚函数表的一种方式(仅供参考):

    虚函数调用过程

    以下面的程序为例:

  • 相关阅读:
    I/O FileInputStream 字节类型文件输入输出流 (汉字显示乱码)
    Date 获取日期 SimpleDateFormat
    Random 随机生成数
    String StringBuffer Arrays 字符串修改 拼接
    Math
    装箱 拆箱Integer .ValueOf()
    LinkedListTest
    springboot cache
    耀眼的明星--项羽
    耀眼的明星--百年虚云
  • 原文地址:https://www.cnblogs.com/shuang0109/p/9109197.html
Copyright © 2011-2022 走看看