有以下兩個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 );
//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;
}