[2] 0x00b61343 {InterfaceDemo2.exe!CIF1::IF3(void)} void *
[3] 0x00b61249 {InterfaceDemo2.exe!CIF2::IF4(void)} void *
[4] 0x00b61433 {InterfaceDemo2.exe!CIF2::IF5(void)} void *
[5] 0x00000000 void *
你发现了什么?虚函数表中的第一项是CIF2::IF1,而不是CIF1::IF1,这说明了当在子类中重写父类的虚函数时,新的函数的地址覆盖了父类的虚函数地址,这样就能在多态时能正确的找到需要被调用的函数;而没有被覆盖的函数还是那样的顺序在虚函数表中存储着。
没有实现多态的多继承
对于简单的,没有实现多态的多继承,比如,有下面的一个多继承关系:
在子类中没有重写任何父类的虚函数,那么它的虚函数表应该是什么样子呢?
虚函数表CIF1,如下:
复制代码[0] 0x001e13d9 {InterfaceDemo2.exe!CIF1::IF1(void)} void *
[1] 0x001e12df {InterfaceDemo2.exe!CIF1::IF2(void)} void *
[2] 0x001e1357 {InterfaceDemo2.exe!CIF1::IF3(void)} void *
[3] 0x001e10c8 {InterfaceDemo2.exe!CIF3::IF4(void)} void *
[4] 0x001e1041 {InterfaceDemo2.exe!CIF3::IF5(void)} void *
[5] 0x001e1249 {InterfaceDemo2.exe!CIF3::IF6(void)} void *
[6] 0x00000000 void *
虚函数表CIF2,如下:
复制代码
[0] 0x001e1258 {InterfaceDemo2.exe!CIF2::IF7(void)} void *
[1] 0x001e1447 {InterfaceDemo2.exe!CIF2::IF8(void)} void *
[2] 0x001e127b {InterfaceDemo2.exe!CIF2::IF9(void)} void *











