有以下两个C++类:
class Base {
public:
Base(int a, int b) : m_a(a), m_b(b) {}
virtual void Func1();
virtual int Func2();
private:
int m_a, m_b;
}
class Derived : public Base {
public:
Derived(int a, int b, double d) : Base(a, b), m_d(d) {}
virtual int Func2();
private:
double m_d;
}
请模拟通常C++编译器的实现机制,用C语言给出Base、Derived的定义,并实现两个类的创建代码。
===================================================================
typedef void** VtblPtr; //意思凑合一下吧
struct base_t
{
VtblPtr _vtbl;
int m_a;
int m_b;
};
struct derived_t
{
VtblPtr _vtbl;
int m_a;
int m_b;
double m_d;
};
new Base时
base_t * pBase = malloc( sizeof(base_t) );
pBase -> _vtbl[0] = & _base_t_Func1;
pBase -> _vtbl[1] = & _base_t_Func2;
_base_t_Base( pBase, a, b ); //这句有点疑问,据说构造函数不需要this?
new Derived时
derived_t * pDerived = malloc(sizeof(derived_t) );
pDerived -> _vtbl[0] = &_base_t_Func1;
pDerived -> _vtbl[1] = &_derived_t_Func2;
derived_t的构造函数
void _derived_t_Derived( derived_t*pDerived, int a, int d)
{
_base_t_Base( (base_t*)pDerived, a, b);
pDerived -> m_d = d;
};