Dynamic Creation(动态创建)

1.新的CRuntimeClass结构

在程序执行期间,根据动态获得的一个类名称,比如动态获得一个类名称,要求程序产生一个对象。
把类的大小记录在类别型录中,把建构函数CRuntimeClass::CreateObject记录在类别型录中,当程序在执行期间获得一个类名称,就可以在类别型录网中找出对应的元素,然后调用其构建函数,产生对象。
重新定义CRuntimeClass
struct CRuntimeClass
{
//Attributes
LPCSTR m_lpszClassName; //类名,一般是指包含CRuntimeClass对象的类的名称
int m_nObjectSize; //包含CRuntimeClass对象的类sizeof的大小,不包括它分配的内存
UINT m_wSchema; // schema number of the loaded class分类编号(对不可分类的类,该值为-1)
CObject* (PASCAL * m_pfnCreateObject)();// NULL => abstract class 指向一个建立实例的构造函数,创建一个类的对象,抽象类则返回NULL(只有在类支持动态创建时才有效;否则,返回NULL)。
//PASCAL不用管,是个过时了的calling convension。 CObject*(* m_pfnCreateObject)(); 指向函数的指针 如:int (*fn)();
//这是mfc用于动态对象创建的CRuntimeClass结构的一个成员变量

CRuntimeClass* m_pBaseClass;//基类对象指针

CObject* CreateObject();
static CRuntimeClass* PASCAL Load();

static CRuntimeClass* pFirstClass;//链表指针
CRuntimeClass* m_pNextClass;//链表指针

};

2.DECLARE_DYNCREATE和/IMPLEMENT_DYNCREATE宏

#define DECLARE_DYNCREATE(class_name)
DECLARE_DYNAMIC(class_name)
static CObject* PASCAL CreateObject();

#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)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值