关于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,这里我最不懂了,子类的子类怎么可以会父类的指针相等呢?还是我理解的不对?