欢迎来到天天文库
浏览记录
ID:20949272
大小:381.30 KB
页数:9页
时间:2018-10-18
《rtti运行时类型识别与类对象的动态创建》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、RTTI运行吋类型识别CRuntimeClass是MFC专用的。CRuntimeClass在文件AFX.H中声明,它是W來串起MFC从COBJECT继承下来的所有类。也可以把A己写的类加入这个链表。structCRuntimeClass{//AttributesLPCSTRmJpszClassName;//笑名intm_nObjectSize;//类对象人小UINTm_w§chema;//分类编号(对不可分类的类,该值为-1)CObjcct*(PASCAL*m_pfnCrcatcObjcct)();//N
2、ULL=>abstractclassCRuntimeClass*m_pBaseClass;//基类指针,但这里针•定足抬向父亲的,而不会指向祖父//CRuntimeClassobjectslinkedtogetherinsimpleliststaticCRuntimeClass*pFirstClass;//classlist的链表义。注意这个乂基类指针不同。并11,该对象是个静态变量,所有CRuntimeClass对象共享CRuntimeClass*m_pNextClass;//链表屮紧跟当前对象的下•个
3、对象。与当前对象不•定有继承关系};特别注意:该struct使用了链表的概念,但是该链表与常规的数裾结构链表是不太一样的。该链表每次新加入的节点都足放在链表尖上的,类似栈。所以pFinstClass足随若每次新W点的加入一直在:更新的,pFirstClass必然指向新加入的什点。而m_pNextClass则抬向前一个加入的节点。如下图:首先初始化staticCRuntimeClass*pFirstClass为NULL。①最开始加入链表的足CObject。此吋:在_IMPLEMENT_RUNTIMECLAS
4、S宏屮先直接设置m_pBaseClass:#m_pBaseClass=NULL;然后在JMPLEMENT_RUNTIMECLASS宏十调川AFX.CLASSINIT的构造函数没gm_pNextClass与pFirstClass:(这两者足先m_pNextClass后pFirstClass)#m_pNextClass=pFirstClass=NULL;#pFirstClass=CObjcct;②然后CCmdTarget加入链表。数据]C新顺序M上:#m_pBaseClass=CObject;#m_pNext
5、Class=pFirstClass=CObject;#pFirstClass=CCmdTarget;③接着CWinThread加入链表。数据更新顺序同上:#m_pBaseClass=CCmdTarget;#m_pNextClass=pFirstClass=CCmdTarget;#pFirstClass=CWinThread;特-个类都拥有这样一个static的CRuntimeClass成员变景。由于每个类都有static的CRuntimeClass成员变量,所以每个类的对象都是引用以及修改本类的stati
6、c的RTTI运行吋类型识别CRuntimeClass是MFC专用的。CRuntimeClass在文件AFX.H中声明,它是W來串起MFC从COBJECT继承下来的所有类。也可以把A己写的类加入这个链表。structCRuntimeClass{//AttributesLPCSTRmJpszClassName;//笑名intm_nObjectSize;//类对象人小UINTm_w§chema;//分类编号(对不可分类的类,该值为-1)CObjcct*(PASCAL*m_pfnCrcatcObjcct)();/
7、/NULL=>abstractclassCRuntimeClass*m_pBaseClass;//基类指针,但这里针•定足抬向父亲的,而不会指向祖父//CRuntimeClassobjectslinkedtogetherinsimpleliststaticCRuntimeClass*pFirstClass;//classlist的链表义。注意这个乂基类指针不同。并11,该对象是个静态变量,所有CRuntimeClass对象共享CRuntimeClass*m_pNextClass;//链表屮紧跟当前对象的下
8、•个对象。与当前对象不•定有继承关系};特别注意:该struct使用了链表的概念,但是该链表与常规的数裾结构链表是不太一样的。该链表每次新加入的节点都足放在链表尖上的,类似栈。所以pFinstClass足随若每次新W点的加入一直在:更新的,pFirstClass必然指向新加入的什点。而m_pNextClass则抬向前一个加入的节点。如下图:首先初始化staticCRuntimeClass*pFirstClass为NULL。①最
此文档下载收益归作者所有