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);
}
推荐阅读:
相关推荐
文山羊 2020-11-07
susmote 2020-11-07
拉斯厄尔高福 2020-11-04
xceman 2020-10-23
hellojunz 2020-10-23
caojhuangy 2020-10-12
xinyupan 2020-09-28
lousir 2020-09-27
一个逗逗 2020-09-22
Maryhuan 2020-09-20
rkhstar 2020-09-09
DreamSnow 2020-09-09
aehousmantao 2020-09-03
tkernel 2020-09-03
abfdada 2020-08-26
svap 2020-08-25
二十不悔三十而立 2020-08-19
FlightForever 2020-08-17
joyjoy0 2020-08-13