我对纯C中虚拟函数的实现感兴趣,这里是一个实现实例。然后通过指向基类的虚拟函数表的指针实现派生类。为什么派生类没有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
}发布于 2013-10-25 11:53:48
它必须使用基类的vtable。关键是它看起来就像一个基类,但在vtable中有不同的条目。因此,这是多形性不同的行为。
发布于 2013-10-25 12:54:54
它确实有它自己的vtable。它使用基类的vtable 指针来指向它,以便只知道基类的代码可以正确地调用在派生类中被重写的虚拟函数。
发布于 2013-10-25 13:55:13
这样做是为了使多态性正确工作。基类的指针或派生类的指针都可以指向同一个对象。如果您调用一个虚拟函数,那么在这两种情况下它都必须调用相同的函数(派生类的函数)。因此,派生类使基类的vtable指针指向它自己的vtable,这样在所有情况下,对象都将使用正确的vtable。
https://stackoverflow.com/questions/19588993
复制相似问题