为什么派生类没有vtable指针而是使用基类的vtable?

时间:2013-10-25 11:47:24

标签: c++ c virtual-functions vtable

我对纯C中的虚函数的实现很感兴趣。这里有一个example of the implementation。然后通过指向基类的虚函数表的指针来实现派生类。为什么派生类没有vtable指针而是使用基类的vtable。也许是因为它们是相同的偏移?

void myClassDerived_ctor(struct myClassDerived *this)
{
    myClassBase_ctor(&this->base);
    this->base.vtable = (void*)&myClassDerived_vtable + sizeof(void*); // used vtable of the base class
}

3 个答案:

答案 0 :(得分:5)

使用基类的vtable。重点是看起来就像一个基类,但在vtable中有个不同的条目。因此,它具有多态不同的行为。

答案 1 :(得分:2)

确实拥有自己的vtable。它使用基类的vtable 指针指向它,这样只知道基类的代码就可以正确地调用在派生类中重写的虚函数。

答案 2 :(得分:0)

这样做是为了使多态性正常工作。基类的指针或派生类的指针可以指向同一个对象。如果调用虚函数,则在两种情况下都必须调用相同的函数(派生类的函数)。因此派生类使基类的vtable指针指向它自己的vtable,这样在所有情况下,对象都将使用正确的vtable。