【面试题】用C模拟C++的多态特性

来源:互联网 发布:淘宝客转链工具 编辑:程序博客网 时间:2024/06/07 05:04

有以下两个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语言给出BaseDerived的定义,并实现两个类的创建代码。

===================================================================

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;

};

原创粉丝点击