C代码模拟实现C++的虚拟表

C++的类成员如果有Virtual修饰符,则在实例化后的对象中会形成一个叫做VTBL(虚拟表)的东西,另外借助C++内在的滞后绑定功能实现所谓的多态性。下面,我借助C代码来大概演示下VTBL的实现原理,仅供参考。

//模拟VTBL,实际为一套函数集合
Struct SampleVtbl {
    void func() {}
}
//模拟带Virtual成员的类
Struct SampleClass {
  SampleVtbl *pVtbl;
}
//分配内存空间,在尾部预留空间为VTBL使用
void init(SampleClass* pObject) {
    pObject = (SampleClass *)malloc(sizeof(SampleClass) + sizeof(SampleVtbl));
    pObject->pVtbl = (SampleVtbl *)(pObject + 1);
}
void TestSample()
{
    SampleBase *obj;
    init(obj);
    (*(SampleVtbl **)obj)->func();
    free(obj);
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7d7ae15866554c705ccf9d9f268a38be.html