具体实现
当我们使用vs创建一个类,并设定好其继承的父类时,在我们创建的类中,会看到以下代码,在.h文件中,即类的声明里有DECLARE_DYNCREATE(className)
在.cpp文件中,即类外有IMPLEMENT_DYNAMIC(className, 父类名)
这两行代码的作用是什么呢?
DECLARE_DYNCREATE(className)具体内容如下:
protected:
static CRuntimeClass* PASCAL _GetBaseClass(); //获取父类静态变量CRuntimeClass的地址
public:
static const CRuntimeClass class##class_name; //本类的静态变量
static CRuntimeClass* PASCAL GetThisClass(); //获取本类静态变量的地址
virtual CRuntimeClass* GetRuntimeClass() const; //获取本类静态变量的地址,当由子类来实现时,获取的就是子类的静态变量的地址
static CObject* PASCAL CreateObject();//创建本类的对象,返回地址
IMPLEMENT_DYNAMIC(className, 父类名)`
CObject* PASCAL class_name::CreateObject()

本文探讨了MFC中DECLARE_DYNCREATE和IMPLEMENT_DYNAMIC宏的作用,详细解释了isKindOf函数的工作原理,以及类的动态创建机制,通过CRuntimeClass结构体在运行时实现对象的创建和类型检查。
最低0.47元/天 解锁文章
6176

被折叠的 条评论
为什么被折叠?



