关于MFC动RTTI的一个小问题!
现在我遇到了我RTTI有一点小问题!先写一个书上写书上的一段代码吧!深入浅出MFC97页!
struct CRuntimeClass
{
LPCSTR m_lpszClassName;
int m_nObjectSize;
UINT m_wSchema;
CObject * (PASCAL * m_pfnCreateObject)(); //为啥有动态分配就非空?
CRuntimeClass * m_pBaseClass;
static CRuntimeClass * pFirstClass; //这个指针有什么用?
CRuntimeClass * m_pNextClass; //这个指针有什么用?
};
pFirstClass老是指向什么?
就上面的结构本,我来问一个函数,深入浅出MFC109页!
BOOL CObject::IsKindOf( const CRuntimeClass *pClass)const
{
CRuntimeClass * pClassThis = GetRuntimeClass();//这一行作什么用?
while (pClassThis != NULL)
{
if (pClassThis != NULL)
return TRUE;
pClassThis =pClassThis->m_pBaseClass;
}
return FALSE;
}
这个函数我有一点没有理解!
我先说一个例子,你用这个例子和我说一下(小心被我误到里面哦)
CWnd * wnd;
cout << wnd->IsKindOf(CDocment); //输出0
我感觉它们有共同的基类CCmdTarget,那个指针不断的指像基类指指的不就指到CCmdTarget了吗,不就也相等了吗,
cout << wnd->IsKindOf(CCmdTarget); //输出1,这里我最不懂了,子类的子类怎么可以会父类的指针相等呢?还是我理解的不对?
struct CRuntimeClass
{
LPCSTR m_lpszClassName;
int m_nObjectSize;
UINT m_wSchema;
CObject * (PASCAL * m_pfnCreateObject)(); //为啥有动态分配就非空?
CRuntimeClass * m_pBaseClass;
static CRuntimeClass * pFirstClass; //这个指针有什么用?
CRuntimeClass * m_pNextClass; //这个指针有什么用?
};
pFirstClass老是指向什么?
就上面的结构本,我来问一个函数,深入浅出MFC109页!
BOOL CObject::IsKindOf( const CRuntimeClass *pClass)const
{
CRuntimeClass * pClassThis = GetRuntimeClass();//这一行作什么用?
while (pClassThis != NULL)
{
if (pClassThis != NULL)
return TRUE;
pClassThis =pClassThis->m_pBaseClass;
}
return FALSE;
}
这个函数我有一点没有理解!
我先说一个例子,你用这个例子和我说一下(小心被我误到里面哦)
CWnd * wnd;
cout << wnd->IsKindOf(CDocment); //输出0
我感觉它们有共同的基类CCmdTarget,那个指针不断的指像基类指指的不就指到CCmdTarget了吗,不就也相等了吗,
cout << wnd->IsKindOf(CCmdTarget); //输出1,这里我最不懂了,子类的子类怎么可以会父类的指针相等呢?还是我理解的不对?
...全文
相关推荐
MFC的RTTI技术及动态创建的实现 详细介绍
MFC的RTTI技术及动态创建的实现 详细介绍
掌握MFC RTTI:动态类型信息与资源使用指南
宏定义在MFC(Microsoft Foundation Classes)中扮演着关键角色,它用于声明一个类能够进行动态类型信息的查询。其核心作用是在编译时为类添加必要的类型信息,以便在运行时能够查询对象的实际类型。在MFC类库中,宏的使用通常伴随着CObject类,后者作为MFC对象系统的根类,为所有派生类提供了RTTI(Run-Time Type Information)的支持。通过在类声明中使用宏,开发者便能利用MFC的RTTI机制进行类型检查,如使用IsKindOf。
MFC RTTI代码(博客中使用资源)
博客中使用的完整源码【MFC(2)】,仿真了 MFC 的 RTTI。博客地址: http://blog.csdn.net/raito__/article/details/51684826
MFC的RTTI和动态创建仿真
MFC框架仿真,实现RTTI和动态创建
MFC中的RTTI,动态创建,消息机制
MFC中的RTTI,动态创建,消息映射,消息传递。


