【上位机——MFC】运行时类信息机制
运行时类信息机制的使用
- 类必须派生自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;
}