歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C代碼模擬實現C++的虛擬表

C代碼模擬實現C++的虛擬表

日期:2017/3/1 9:51:51   编辑:Linux編程

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