首页 > 代码库 > 初识MFC----运行时类信息机制
初识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----运行时类信息机制