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

implement_dyncreate_on_cbn_editchange_cbrush

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

随便搜索一下,发现给出的解释是在运行期让派生类支持动态创建,可是给出详细解释的却很少,那么下面仔细看看此宏的扩展:

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

#define _DECLARE_DYNCREATE(class_name) \
        _DECLARE_DYNAMIC(class_name) \
        static CObject* PASCAL CreateObject();

从上面看到 DECLARE_DYNCREATE 内部使用了 DECLARE_DYNAMIC 宏,那么设想一下是否 IMPLEMENT_DYNCREATE 内部也应该使用 IMPLEMENT_DYNAMIC宏,我们来看看是不是这样:

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

发现并没有IMPLEMENT_DYNAMIC 宏,别着急,让我们先来看看IMPLEMENT_DYNAMIC 宏:

#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
        IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL, NULL)

这样看来他们在内部是相同的,内部是使用 DECLARE_DYNAMIC 、IMPLEMENT_DYNAMIC,下面借来仔细观察这两个宏的内部拓展。implement_dyncreate

IMPLEMENT_DYNAMIC 是实现“运行时类型识别”宏,与之相对应的是 DECLARE_DYNAMIC 声明“运行时类型识别”宏)。也就是说你在.CPP文件中如果看见有IMPLEMENT_DYNAMIC,则在.h文件中必定有DECLARE_DYNAMIC的声明。

DECLARE_DYNAMIC/DECLARE_DYNAMIC 是为了确定运行时对象属于哪一个类而定义的宏。

DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE 是为了“动态创建"类的实例而定义的宏。new可以用来创建对象,但不能在还不知道要创建那个类的对象时进行动态的创建。可以参考一个很普遍的例子:

要在程序中实现根据拥护输入的类名来创建类的实例,下面的做法是通不过的

char szClassName[60];
cin >> szClassName;
CObject* pOb=new szClassName; //通不过

这里就要用到 DEClARE_DYNCREATE/IMPLEMENT_DYNCREATE 定义的功能了。implement_dyncreate

查看afx.h头文件里的宏定义:


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

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

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