在“C/C++杂记:虚函数的实现的基本原理”一文中曾提到“虚函数表”的概念,只是为了便于理解,事实是:虚函数表并不真的独立存在,它只是虚表(virtual table)中的一部份内容。例:html
从图中可已看出,虚表除了包含虚函数指针,还包含其它一些信息(如:RTTI信息、偏移值等)。git
顺便介绍一下gcc的-fdump-class-hierarchy选项,它能够用于输出C++程序的虚表结构(在当前目录下生成一个.class文件),例:github
一个虚表包含如下几个部分:函数
其中:指针
前一节的示例是单继承的示例,下面列出了一个多继承的示例:orm
从中能够看到:D的虚表中包含两个虚表结构,第一个也称之为“主虚表”(primary virtual table),另外一个虚表又称之为“次虚表”(secondary virtual table)。htm
简单地归纳一下:一个含有虚函数(不管是其自己的,仍是继承而来的)的类,能够有一个主虚表和多个次虚表,主虚表和次虚表构成一个虚表组(virtual table group)。对象
Itanium C++ ABIblog