歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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);
}

Copyright © Linux教程網 All Rights Reserved