程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C實現C++的多態性,呵呵......,多態.....

C實現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;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved