WEB开发网
开发学院软件开发VC MFC教程(3)-- CObject类 阅读

MFC教程(3)-- CObject类

 2010-03-25 20:33:52 来源:WEB开发网   
核心提示:由上可以看出,CObject定义了一个CRuntimeClass类型的静态成员变量:CRuntimeClass classCObject还定义了几组函数:构造函数析构函数类,MFC教程(3)-- CObject类(2),诊断函数,与运行时类信息相关的函数,在类说明中使用DECLARE_DYNCREATE(CLASSNM

由上可以看出,CObject定义了一个CRuntimeClass类型的静态成员变量:

CRuntimeClass classCObject

还定义了几组函数:

构造函数析构函数类,

诊断函数,

与运行时类信息相关的函数,

与串行化相关的函数。

其中,一个静态函数:_GetBaseClass;五个虚拟函数:析构函数、GetRuntimeClass、Serialize、AssertValid、Dump。这些虚拟函数,在CObject的派生类中应该有更具体的实现。必要的话,派生类实现它们时可能要求先调用基类的实现,例如Serialize和Dump就要求这样。

静态成员变量classCObject和相关函数实现了对CObjet特性的支持。

CObject类的特性

下面,对三种特性分别描述,并说明程序员在派生类中支持这些特性的方法。

对运行时类信息的支持

该特性用于在运行时确定一个对象是否属于一特定类(是该类的实例),或者从一个特定类派生来的。CObject提供IsKindOf函数来实现这个功能。

从CObject派生的类要具有这样的特性,需要:

定义该类时,在类说明中使用DECLARE_DYNAMIC(CLASSNMAE)宏;

在类的实现文件中使用IMPLEMENT_DYNAMIC(CLASSNAME,BASECLASS)宏。

对动态创建的支持

前面提到了动态创建的概念,就是运行时创建指定类的实例。在MFC中大量使用,如前所述框架窗口对象、视对象,还有文档对象都需要由文档模板类(CDocTemplate)对象来动态的创建。

从CObject派生的类要具有动态创建的功能,需要:

定义该类时,在类说明中使用DECLARE_DYNCREATE(CLASSNMAE)宏;

定义一个不带参数的构造函数(默认构造函数);

在类的实现文件中使用IMPLEMENT_DYNCREATE(CLASSNAME,BASECLASS)宏;

使用时先通过宏RUNTIME_CLASS得到类的RunTime信息,然后使用CRuntimeClass的成员函数CreateObject创建一个该类的实例。

例如:

CRuntimeClass* pRuntimeClass = RUNTIME_CLASS(CNname)

//CName必须有一个缺省构造函数

CObject* pObject = pRuntimeClass->CreateObject();

//用IsKindOf检测是否是CName类的实例

Assert( pObject->IsKindOf(RUNTIME_CLASS(CName));

上一页  1 2 3 4 5 6 7  下一页

Tags:MFC 教程 CObject

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接