设为首页 加入收藏

TOP

C代码模拟实现C++的虚拟表
2014-11-24 02:31:51 来源: 作者: 【 】 浏览:1
Tags:代码 模拟 实现 虚拟

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


推荐阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenCV 数字图像灰度直方图 下一篇写给Linux Shell编程初学者

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: