首页 > 代码库 > C实现C++的多态性,呵呵......
C实现C++的多态性,呵呵......
有以下两个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;}
C实现C++的多态性,呵呵......
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。