本次仿真为了便于理解,使其做到最简单,去除了其他所有不必要的东西,只留下最核心的东西即如何实现动态创建对象。
动态创建本质:return new class_name;
在mfc.h中的如下位置:
/**************************************************************************************
* implement dynamic create 实现动态创建
* 作用:实现动态创建的关键,定义创建对象函数并注册到类别型录网
**************************************************************************************/
#define IMPLEMENT_DYNCREATE(class_name, base_class_name) \
CObject* PASCAL class_name::CreateObject() \
{ return new class_name; } \
_IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, \
class_name::CreateObject)
动态创建的过程:
在my.cpp的main函数中:
/* 动态创建实验 */
CRuntimeClass* pClassRef;
CObject* pOb;
while (1)
{
/* 1、Load函数内部仿真了RTTI,若匹配成功则返回其地址 */
if ((pClassRef = CRuntimeClass::Load()) == NULL)
break;
/* 2、CRuntimeClass结构体的CreateObject()成员函数内部调用了类的CreateObject() */
/* 从而取到的新创建的类对象的地址(实现的动态创建) */
pOb = pClassRef->CreateObject();
}
动态创建的结果:
注册到类别型录网中的类别在动态创建时会调用其构造函数,未注册的则不能被动态创建。
简单结构:
该结构图估计就我自己看得懂,是我自己为了理解随便画的一个草图。
下载项目源码:http://download.csdn.net/detail/w__l__/9879724
(为了弄点积分下其他资料,本资源需要1积分,积分多的可以赏点,不多的下方回复我发链接给你)
对于动态创建,本人也还有很多疑惑,若博文中有错误还望大牛赐教。