具体实现
当我们使用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(