运行时类信息机制的使用
- 类必须派生自CObject
- 类内必须添加声明宏DECLARE_DYNAMIC(theClass)
- 3.类外必须添加实现宏 IMPLEMENT_DYNAMIC(theClass,baseClass)
具备上述三个条件后,CObject::IsKindOf函数就可以正确判断对象是否属于某个类。
代码示例
cpp
#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()对象加工厂函数就可以将类的对象创建出来。
代码示例
cpp
#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;
}