2024年4月27日发(作者:)

t类

CObject是大多数MFC类的根类或基类。CObject类有很多有用的特性:

对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊

断输出,等等。MFC从CObject派生出许多类,具备其中的一个或者多

个特性。程序员也可以从CObject类派生出自己的类,利用CObject类

的这些特性。

本章将讨论MFC如何设计CObject类的这些特性。首先,考察CObject

类的定义,分析其结构和方法(成员变量和成员函数)对CObject特性

的支持。然后,讨论CObject特性及其实现机制。

t的结构

以下是CObject类的定义:

classCObject

{

public:

//与动态创建相关的函数

virtualCRuntimeClass*GetRuntimeClass()const;

析构函数

virtual~CObject();//virtualdestructorsarenecessary

//与构造函数相关的内存分配函数,可以用于DEBUG下输出诊断

信息

void*PASCALoperatornew(size_tnSize);

void*PASCALoperatornew(size_t,void*p);

voidPASCALoperatordelete(void*p);

#ifdefined(_DEBUG)&&!defined(_AFX_NO_DEBUG_CRT)

void*PASCALoperatornew(size_tnSize,LPCSTR

lpszFileName,intnLine);

#endif

//缺省情况下,复制构造函数和赋值构造函数是不可用的

//如果程序员通过传值或者赋值来传递对象,将得到一个编译错

protected:

//缺省构造函数

CObject();

private:

//复制构造函数,私有

CObject(constCObject&objectSrc);//noimplementation

//赋值构造函数,私有

voidoperator=(constCObject&objectSrc);//no

implementation

//Attributes

public:

//与运行时类信息、串行化相关的函数

BOOLIsSerializable()const;

BOOLIsKindOf(constCRuntimeClass*pClass)const;

//Overridables

virtualvoidSerialize(CArchive&ar);

//诊断函数

virtualvoidAssertValid()const;

virtualvoidDump(CDumpContext&dc)const;

//Implementation

public:

//与动态创建对象相关的函数