我们都知道,虚函数是用来支持C++中的多态的,而单独的一个类,有了虚函数,而没有任何继承关系,也就是说没有子类去覆盖父类的虚函数,这样是毫无意义的。所以下面就要从各个方面进行详细的说明虚函数表。
没有实现多态的单继承
比如有如下的继承关系:
在这个继承关系中,CIF2作为CIF1的子类,但是CIF2没有重写CIF1类的任何虚函数;定义CIF2 if2Obj;实例,在派生类的实例中,它的虚函数表应该是像下面这样的:
复制代码[0] 0x011513c5 {InterfaceDemo2.exe!CIF1::IF1(void)} void *
[1] 0x011512cb {InterfaceDemo2.exe!CIF1::IF2(void)} void *
[2] 0x01151343 {InterfaceDemo2.exe!CIF1::IF3(void)} void *
[3] 0x01151249 {InterfaceDemo2.exe!CIF2::IF4(void)} void *
[4] 0x01151433 {InterfaceDemo2.exe!CIF2::IF5(void)} void *
[5] 0x01151267 {InterfaceDemo2.exe!CIF2::IF6(void)} void *
[6] 0x00000000 void *
可以发现,虚函数按照其声明顺序存放在表中,父类的虚函数在子类的虚函数前面。
实现多态的单继承
现在我在CIF2类中,重写CIF1类的IF1函数,它们的关系如下:
在上图中,CIF2继承了CIF1,并且在CIF2类中重写了CIF1的虚函数IF1,那我们现在看看虚函数表是什么样子的?
复制代码
[0] 0x00b61311 {InterfaceDemo2.exe!CIF2::IF1(void)} void *
[1] 0x00b612c6 {InterfaceDemo2.exe!CIF1::IF2(void)} void *












