怎样用C语言实现C++中的class和virtual方法? 怎样用C语言实现C++中的class和virtual方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用struct关键字。定义一个结构体,结构体成员中定义一个指针。使这个指针指向一个函数。这样就模拟了一个class 原理很简单,实现比较麻烦:虚函数就是在数据区前面放上虚函数指针(微软实现方式,GCC是地址)例如:class base{...virtual Fun();};class a:base{ int a,b,c; virtual Fun();}class b:base{ int d,e,f; virtual Fun();}在内存中是这样的(仅为示意)a:pFunA;a;b;c;b:pFunB;d;e;f;所以,你用结构体也很容易摹仿这个。调用过程:编译器在调用虚函数时,先到相应对象的数据区取回虚函数的实际地址,然后再调用。麻烦就在这步,这是编译器实现的调用,这样语调用普通函数源码形式上是一样的,而你自己实现,形式就不一样了。 Module32First函数的使用 CList 的序列化问题 缩放显示的位图截取目标,并保存 CWMPPlayer4问题 listctrl合并单元格 挑战高手(一个有关CDOSYS的问题) ATL中m_spInPlaceSite->GetWindow取得的句柄和m_hWnd有什么区别? 一个so easy 的问题,在xp中如何不启动explore的情况下,启动自己的程序(up有分) 一个课后习题,求高手指点! 如何让目标窗口最大化,这个简单的需求为什么这么难以实现? 在Console Application中不能使用CSocket? ATL问题再问
虚函数就是在数据区前面放上虚函数指针(微软实现方式,GCC是地址)
例如:
class base
{
...
virtual Fun();
};
class a:base
{
int a,b,c;
virtual Fun();
}
class b:base
{
int d,e,f;
virtual Fun();
}在内存中是这样的(仅为示意)
a:
pFunA;a;b;c;b:
pFunB;d;e;f;所以,你用结构体也很容易摹仿这个。调用过程:
编译器在调用虚函数时,先到相应对象的数据区取回虚函数的实际地址,然后再调用。
麻烦就在这步,这是编译器实现的调用,这样语调用普通函数源码形式上是一样的,而你自己实现,形式就不一样了。