C++虚函数表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

类ClassB继承自ClassA!解释如下:指向ClassA虚函数表指针保存在009C7834这个地址,但是指向ClassB虚函数表的指针保存在009C7924这个地址处。但是由于ClassB没有修改虚函数,那么猜测4个对象应该指向同一个虚函数其实就是ClassAVirtualFunction()这个函数,至于是不是呢?继续看图!

对了吧?4个对象共同指向了00D01091这个地址,其实说白了这个但是就是虚函数的地址。因为子类没有改写虚函数,所以子类指向的虚函数地址和父类指向的虚函数地址是一样的,如果我们改写虚函数的话,那么子类指向的虚函数地址就应该是变化的了!

可以看到,ClassB没有改写虚函数,但是ClassC重载了父类的虚函数。所以

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

相关文档
最新文档