首页 / 软件开发 / C++ / MFC教程(3)-- CObject类
MFC教程(3)-- CObject类2010-03-25CObject是大多数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// Attributespublic://与运行时类信息、串行化相关的函数BOOL IsSerializable() const;BOOL IsKindOf(const CRuntimeClass* pClass) const;// Overridablesvirtual void Serialize(CArchive& ar);// 诊断函数virtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;// Implementationpublic://与动态创建对象相关的函数static const AFX_DATA CRuntimeClass classCObject;#ifdef _AFXDLLstatic CRuntimeClass* PASCAL _GetBaseClass();#endif};