b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

on_cbn_editchange_implement_dyncreate_beginmessagemap

电脑杂谈  发布时间:2017-01-13 02:03:29  来源:网络整理

//函数

}

在头文件中的宏

#define DECLARE_DYNCREATE(class_name)\

DECLARE_DYNAMIC(class_name)\ //这个是声明了一个静态变量和函数,在前一节有说明

static CObject* _stdcall CreateObject();//这个函数就是为了创建一个新的对象,返回对象指针。指针

//类型为CObject,则如果指到CObject派生出的类,因为虚函数

//的性质,依然调用的是派生类的函数

在执行文件中解释了static CObject* _stdcall CreateObject();

#define IMPLEMENT_DYNCREATE(class_name,base_class_name)\

CObject* _stdcall class_name :: CreateObject()\

{ return new class_name;}\//每个非抽象类中如果调用了这个宏,则里面的CreateObject()

//就在于建立一个该类的新对象,并返回新对象的地址。用祖宗

//类CObject的指针指向这个新地址

_IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,class_name::CreateObject)//最后一个参数表明赋予的是这个函数的地址

再来看前面CRuntimeClass中的两个函数

CObject* CRuntimeClass::CreateObject()

{

if(m_pfnCreateObject==NULL))

{

//抽象类这个值就为NULL,非抽象类如上面所述这个值被赋值为了类中CreateObject()函数的地址。implement_dyncreate

return NULL;

}

CObject* pObject = (*m_pfnCreateObject)();

//若这个值存在,这调用这个函数,函数的作用前面已经说了,就是创建一个新对象。implement_dyncreate通了吧~~~

return pObject;

}

解释完这两个宏再讲一下如何动态调用吧。

首先在头文件中得写上这么一行代码

DECLARE_DYNCREATE(class_name);//class_name是你需要动态创建了类名,注意非抽象类。

执行文件中得写上这么一行代码

IMPLEMENT_DYNCREATE(class_name,base_class_name)//base_class_name是父类

然后假如从 输入了一个类名 szClassName;

CRuntimeClass pClass;

for(pClass = pFirstClass; pClass != NULL; pClass = pClass ->m_pNextClass)

{

if(strcmp(szClassName,pClass->m_lpszClassName)==0)

return pClass;

}

//以上这段代码也就是Load函数的核心部分,就是匹配与输入的名字相同的类,所以前面说Load函数是个匹配的过程

pClass->CreateObject();//调用的为该类中的CreateObject();因为没类中都会有一个CRuntimeClass,CRuntimeClass里都会有CeateObject()建立一个新的该类


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-25931-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...