您的位置:首页 > 编程语言 > C语言/C++

MFC六大关键技术之仿真学习笔记(四)

2015-06-06 18:08 411 查看
     这一节我认为挺简单的,IsKindOf无非就是判断某个对象是否是某种类或者继承于某种类。

*IsKindOf(运行时类型识别)

     因为有了前面的“类型识别”网,我们可以很方便进行“同宗”路线的追踪,当然我们也可以"对类型识别"网进行遍历,得到所有类型。

我们在CObject中加入一个成员函数:

BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
{
CRuntimeClass* pClassThis = GetRuntimeClass();
while (pClassThis != NULL)
{
if (pClassThis == pClass)
{
return TRUE;
}
pClassThis = pClassThis->m_pBaseClass;
}
return FALSE;
}

当然所有派生于CObject的类均实现这种方法,依次向基类对比对应的CRuntimeClass。其实我当时在想啊,这个比较为什么不直接对比CRuntimeClass中的m_lpszClassName呢?

MFC在这里的处理很巧妙,我们在DECARE_DYNAMIC中可以看到

static CRuntimeClass class##class_name; 

virtual CRuntimeClass* GetRuntimeClass() const;

GetRuntimeClass() 经过override可返回相对应的class##class_name成员,class##class_name为静态成员,即类对应唯一一个class##class_name,那么我们便可根据class##class_name地址比较来确定是否是某种类型或者继承于某种类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MFC c++