運行時類信息機制的使用
- 類必須派生自CObject
- 類內必須添加聲明宏DECLARE_DYNAMIC(theClass)
- 3.類外必須添加實現宏 IMPLEMENT_DYNAMIC(theClass,baseClass)
具備上述三個條件后,CObject::IsKindOf函數就可以正確判斷對象是否屬于某個類。
代碼示例
#include <afxwin.h>
#include <iostream>using namespace std;class CAnimal : public CObject {DECLARE_DYNAMIC(CAnimal)};
IMPLEMENT_DYNAMIC(CAnimal,CObject)class CDog : public CAnimal {DECLARE_DYNAMIC(CDog)};
IMPLEMENT_DYNAMIC(CDog, CAnimal)int main() {CDog yellowdog;// 判斷yellowdog 這個類是不是CDog這個類//if (yellowdog.IsKindOf(RUNTIME_CLASS(CAnimal))) {if (yellowdog.IsKindOf(RUNTIME_CLASS(CDog))) {cout << "yellowdog is CDog" << endl;}else {cout << "yellowdog is not CDog" << endl;}return 0;
}
動態創建機制的使用
在不知道類名的情況下,將類的對象創建出來。
- 類必須派生自CObject
- 類內必須添加聲明宏 DECLARE_DYNCREATE(theClass)
- 類外必須添加實現宏 IMPLEMENT_DYNCREATE(theClass,baseClass)
當一個類具備上述三個條件后,CRuntimeClass::CreateObject()對象加工廠函數就可以將類的對象創建出來。
代碼示例
#include <afxwin.h>
#include <iostream>using namespace std;class CAnimal : public CObject {DECLARE_DYNAMIC(CAnimal)};
IMPLEMENT_DYNAMIC(CAnimal, CObject)class CDog : public CAnimal {DECLARE_DYNCREATE(CDog)};
IMPLEMENT_DYNCREATE(CDog, CAnimal)int main() {CObject* pob = RUNTIME_CLASS(CDog)->CreateObject();if (pob) {cout << pob << endl;} else {cout << "faile" << endl;}return 0;
}