初識MFC----運行時類信息機制
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----運行時類信息機制