MFC中运行时类型识别和动态创建类对象
2012-05-18 16:41
309 查看
DECLARE_DYNAMIC
IMPLEMENT_DYNAMIC
RUNTIME_CLASS
DECLARE_DYNCREATE
CRuntimeClass
等相关的宏定义。都是为动态创建类对象。为什么要动态创建类对象呢?在建立一个MFC程序时,MFC要搭起一个框架,这时它需要用到用户定义的类型的信息,比如定义一个CMyMFC程序,它需要使用CMyMFCApp这个类构造对象。但微软在制作MFC的时候并不知道CMyMFCApp,于是就出现了上述那些宏,那些宏就可以使MFC有能力在需要使用用户定义类的地方使用用户定义类来搭框架。
CRuntimeClass与其说类,不如说是个结构体。每一个从MFC类派生出的类都维护了一个CRuntimeClass类型变量。所有类的CRuntimeClass类型变量构建了一个链表。上述MFC之所以能确定用户定义类的名字,其实就是在这个链表信息中找到的。
RUNTIME_CLASS是一个类成员指针,指向用户定义类的CRuntimeClass成员。
这里顺便提一下虚函数形成的动态识别,注意,虚函数提供的多态性虽然也是运行时多态性。但是它毕竟有个前提,就是,类层次中所有的类的名字在编译时已经确定了。这显然并无法满足上述MFC动态创建对象的需要。
MFC中所有的类都从CObject类派生,好多常用类都从CCmdTarget类派生,估计也是为了构造一张完整的CRuntimeClass网,使所有的MFC派生类都能被动态识别和创建。
IMPLEMENT_DYNAMIC
RUNTIME_CLASS
DECLARE_DYNCREATE
CRuntimeClass
等相关的宏定义。都是为动态创建类对象。为什么要动态创建类对象呢?在建立一个MFC程序时,MFC要搭起一个框架,这时它需要用到用户定义的类型的信息,比如定义一个CMyMFC程序,它需要使用CMyMFCApp这个类构造对象。但微软在制作MFC的时候并不知道CMyMFCApp,于是就出现了上述那些宏,那些宏就可以使MFC有能力在需要使用用户定义类的地方使用用户定义类来搭框架。
CRuntimeClass与其说类,不如说是个结构体。每一个从MFC类派生出的类都维护了一个CRuntimeClass类型变量。所有类的CRuntimeClass类型变量构建了一个链表。上述MFC之所以能确定用户定义类的名字,其实就是在这个链表信息中找到的。
RUNTIME_CLASS是一个类成员指针,指向用户定义类的CRuntimeClass成员。
这里顺便提一下虚函数形成的动态识别,注意,虚函数提供的多态性虽然也是运行时多态性。但是它毕竟有个前提,就是,类层次中所有的类的名字在编译时已经确定了。这显然并无法满足上述MFC动态创建对象的需要。
MFC中所有的类都从CObject类派生,好多常用类都从CCmdTarget类派生,估计也是为了构造一张完整的CRuntimeClass网,使所有的MFC派生类都能被动态识别和创建。
相关文章推荐
- MFC运行时类型识别(MFC RTTI)与动态创建
- MFC 类型识别与动态创建
- MFC技术内幕系列之(三)----MFC执行期类型识别与动态创建技术内幕
- MFC执行期类型识别与动态创建技术内幕
- MFC复习(四)MFC执行期类型识别与动态创建技术
- 深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建) .
- MFC技术内幕系列之(三)----MFC执行期类型识别与动态创建技术内幕
- RTTI运行时类型识别与类对象的动态创建
- MFC技术内幕系列之(三)----MFC执行期类型识别与动态创建技术内幕
- 深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建) .
- 深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建)
- MFC执行期类型识别与动态创建技术内幕
- MFC技术内幕系列之(三)----MFC执行期类型识别与动态创建技术内幕
- MFC技术内幕系列之(三)----MFC执行期类型识别与动态创建技术内幕
- MFC技术内幕系列之(三)---MFC执行期类型识别与动态创建技术内幕
- MFC执行期类型识别与动态创建技术内幕
- 理解“MFC的动态类型识别和动态创建”
- MFC六大关键技术之(二)——运行时类型识别(RTTI)
- MFC(五)运行时类信息机制 动态创建机制 序列化机制
- MFC中的RTTI(Runtime Type Identification, 运行时类型识别)详解(参考《深入浅出MFC》)