当前位置:文档之家› C++虚函数表

C++虚函数表

类只有2个变量,但是大小却是12,因为此类包含了虚函数!所以,另外4个字节其实就是虚函数表指针的大小!说白了,虚函数的原理就是准备一个虚函数表的指针,这个指针指向这个类所有的虚函数,然后用这个虚函数表指针访问所有的虚函数!并且,这个指向虚函数表的指针就保存在0043DFCC 这个地址处。

可以看下面的图来得到验证!
类ClassB继承自ClassA!解释如下:指向ClassA虚函数表指针保存在009C7834这个地址,但是指向ClassB虚函数表的指针保存在009C7924这个地址处。

但是由于ClassB没有修改虚函数,那么猜测4个对象应该指向同一个虚函数其实就是ClassAVirtualFunction()这个函数,至于是不是呢?继续看图!
对了吧?4个对象共同指向了00D01091这个地址,其实说白了这个但是就是虚函数的地址。

因为子类没有改写虚函数,所以子类指向的虚函数地址和父类指向的虚函数地址是一样的,如果我们改写虚函数的话,那么子类指向的虚函数地址就应该是变化的了!
可以看到,ClassB没有改写虚函数,但是ClassC重载了父类的虚函数。

所以
ClassB和ClassA指向了相同的虚函数地址。

但是ClassC由于重写了父类的虚函数,所以指向了新的函数地址!。

相关主题