1. 程式人生 > >初識MFC----運行時類信息機制

初識MFC----運行時類信息機制

初識 鏈表 數據結構 next 執行 結構 bject 相關 lpc

1、運行時類信息機制的作用

  程序運行過程中,可以獲知對象的相關類的信息

2、運行時類信息機制的使用

  2.1類必須派生自CObject類

  2.2類內必須添加聲明宏 DECLARE_DYNAMIC

  2.3類外必須添加實現宏 IMPLEMENT_DYNAMIC

  CObject::IsKindOf(...) -來判斷對象是否屬於某個類

3、數據結構

  struct CRuntimeClass

  {

    LPCSTR m_lpszClassName; //類的名稱

    int m_nObjectSize; //類的大小

    UINT m_wSchema; //類的版本

    //是用於動態創建機制的,在用於運行時類信息機制時為NULL

    CObject* (PASCAL* m_pfnCreateObject)();

    CRuntimeClass* m_pBaseClass; //父類靜態變量地址(連接鏈表)

    CRuntimeClass* m_pNextClass; //為NULL

  };

4、宏展開的代碼

5、宏展開的各部分的作用

  classCDog -靜態變量,保存了關於類的信息,連接一個鏈表

  GetRuntimeClass -虛函數,獲取本類靜態變量地址(獲取鏈表頭節點)

6、IsKindOf 執行過程

  6.1利用CDog類的對象(yellowdog)調用虛函數GetRuntimeClass()獲取CDog類的靜態變量地址(鏈表頭節點)

  6.2將CDog類的靜態變量和目標進行比對,如果相等,證明對象屬於這個類,如果不相等獲取父類靜態變量循環和目標進行比對。

  6.3只要有一次相等也能證明對象屬於這個類

  6.4循環結束始終比對不成功,證明對象不屬於這個類

RUNTIME_CLASS(theClass) -返回括號中類的靜態變量地址 &theClass::classtheClass

初識MFC----運行時類信息機制