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