当前位置:编程学习 > C/C++ >>

CObject类

 

CObject是大多数MFC类的根类或基类。CObject类有很多有用的特性:对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊断输出,等等。MFC从CObject派生出许多类,具备其中的一个或者多个特性。程序员也可以从CObject类派生出自己的类,利用CObject类的这些特性。

本章将讨论MFC如何设计CObject类的这些特性。首先,考察CObject类的定义,分析其结构和方法(成员变量和成员函数)对CObject特性的支持。然后,讨论CObject特性及其实现机制。

CObject的结构

以下是CObject类的定义:

class CObject

{

public:

 

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

virtual CRuntimeClass* GetRuntimeClass() const;

析构函数

virtual ~CObject();  // virtual destructors are necessary

 

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

void* PASCAL operator new(size_t nSize);

void* PASCAL operator new(size_t, void* p);

void PASCAL operator delete(void* p);

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

    void* PASCAL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);

#endif

 

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

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

protected:

//缺省构造函数

CObject();

private:

//复制构造函数,私有

CObject(const CObject& objectSrc);        // no implementation

//赋值构造函数,私有

void operator=(const CObject& objectSrc);     // no implementation

 

// Attributes

public:

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

BOOL IsSerializable() const;

BOOL IsKindOf(const CRuntimeClass* pClass) const;

// Overridables

virtual void Serialize(CArchive& ar);

// 诊断函数

virtual void AssertValid() const;

virtual void Dump(CDumpContext& dc) const;

 

// Implementation

public:

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

static const AFX_DATA CRuntimeClass classCObject;

#ifdef _AFXDLL

static CRuntimeClass* PASCAL _GetBaseClass();

#endif

};

 

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

CRuntimeClass classCObject

还定义了几组函数:

构造函数析构函数类,

诊断函数,

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,