MFC中运行时类型识别和动态创建类对象

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派生类都能被动态识别和创建。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值