关于候俊杰《深入浅出MFC》IMPLEMENT_DYNAMIC宏中的疑问

在《深入浅出MFC》99页中,有这样一个构造函数:AFX_CLASSINIT::AFX_CLASSINIT(CruntimeClass*pNewClass){pNewCl... 在《深入浅出MFC》99页中,有这样一个构造函数:
AFX_CLASSINIT:: AFX_CLASSINIT(CruntimeClass* pNewClass)
{
pNewClass-> m_pNextClass= CruntimeClass;;pFirstClass;
CruntimeClass;;pFirstClass= pNewClass;
}
我有二个问题:
1、查看afx.h中struct CRuntimeClass的定义,根本没有pFirstClass这个成员,可候俊杰说有,这是怎么回事?
1、为什么我在下面的程序中human.GetRuntimeClass()->和girl.GetRuntimeClass()->后,其他成员都显示,就是不显示 m_pNextClass和pFirstClass。手动添加m_pNextClass不报错,但值都是0,按道理这二个值都不应该为0,因为后面还有Cobject 中的CRuntimeClass地址呀?
#include <afxwin.h>
#include <iostream.h>

class CHuman:public CObject
{
DECLARE_DYNAMIC(CHuman)
public:
int age;
char*lpszName;
CHuman();

};

class CWoman:public CObject
{
DECLARE_DYNAMIC(CWoman);
public:
int age;

};
IMPLEMENT_DYNAMIC(CHuman,CObject)
IMPLEMENT_DYNAMIC(CWoman,CObject)

CHuman::CHuman()
{
age=20;
lpszName="abc";
cout<<age<<endl;
cout<<lpszName<<endl;
}

int main()
{

CHuman human;

cout<<human.GetRuntimeClass()->m_pfnGetBaseClass()<<endl;
cout<<human.GetRuntimeClass()<<endl;
// cout<<human.GetRuntimeClass()->m_pNextClass<<endl; //输出为0
CWoman girl;
cout<<girl.GetRuntimeClass()->m_pfnGetBaseClass()<<endl;
cout<<girl.GetRuntimeClass()<<endl;
//cout<<girl.GetRuntimeClass()->pFirstClass<<endl; //编译出错,说没有这个成员
// cout<<girl.GetRuntimeClass()->m_pNextClass<<endl; //输出也是0
return 0;

}
展开
 我来答
龚炜林
2014-10-26 · TA获得超过1560个赞
知道大有可为答主
回答量:1102
采纳率:66%
帮助的人:608万
展开全部
这是mfc 源码(vc 6.0中,mfc版本未查)
struct AFX_CLASSINIT
{ AFX_CLASSINIT(CRuntimeClass* pNewClass) { AfxClassInit(pNewClass); } };
void AFXAPI AfxClassInit(CRuntimeClass* pNewClass)
{
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
AfxLockGlobals(CRIT_RUNTIMECLASSLIST);
pModuleState->m_classList.AddHead(pNewClass);
AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
}

记住原理就行,mfc也是在随时变化的。侯杰可能只是想简单一些说明。

希安斯
2025-02-13 广告
希安斯贸易(上海)有限公司的CRC PR2043产品,是我们精心打造的一款高性能产品。该产品采用了先进的技术和优质材料,确保了其在应用中的稳定性和可靠性。CRC PR2043不仅具有出色的性能表现,还具备易于操作和维护的特点,能够满足广大客... 点击进入详情页
本回答由希安斯提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式