您的位置:首页 > 其它

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派生类都能被动态识别和创建。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐