All articles(网络文学目录) All Pictures(图片目录) All Softwares(软件目录)

 
visual c++ MFC的CObject类

Writer: qq Article type: Programming skills(编程技巧) Time: 2014/7/9 22:38:26 Browse times: 295 Comment times: 0

visual c++ MFC的CObject类


Head photo

Go homepage
Upload pictures
Write articles

visual c++ MFC的CObject类

visual c++ MFC的CObject类
MFC的CObject类是抽象类最原始的一个例子。它没有任何祖先,因此可以从它出发直接创建该类的对象。CObject的原型如下:
class AFX_NOVTABLE CObject
#endif
{
public:
// Object model (types, destruction, allocation)
virtual CRuntimeClass* GetRuntimeClass() const;
virtual ~CObject(); // virtual destructors are necessary
// Diagnostic allocations
void* PASCAL operator new(size_t nSize);
void* PASCAL operator new(size_t, void* p);
void PASCAL operator delete(void* p);
#if _MSC_VER >= 1200
void PASCAL operator delete(void* p, void* pPlace);
#endif
#if defined(_DEBUG) && !defined(_AFX_NO_DEBUG_CRT)
void* PASCAL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
#if _MSC_VER >= 1200
void PASCAL operator delete(void *p, LPCSTR lpszFileName, int nLine);
#endif
#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);
#if defined(_DEBUG) || defined(_AFXDLL)
// Diagnostic Support
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Implementation
public:
static const AFX_DATA CRuntimeClass classCObject;
#ifdef _AFXDLL
static CRuntimeClass* PASCAL _GetBaseClass();
#endif
};
从原型中可以看出,CObject类为程序员提供了对象诊断、运行时类型标识和序列化等功能。读者可以看到,构造函数的属性是protected,也就是说必须从一个派生类来对它进行初始化。派生类只继承了4个成员函数(除了操作运算符重载)和一个运行类对象。它不支持多重继承,派生类不能有多于一个的CObject类。
通常在使用MFC编程中并不会直接使用CObject类,除非读者想要从它出发进行类继承。往往实际编程中使用和继承它的子孙类来创建和操作对象。
CObject类的功能如下:
(1)对象诊断:MFC提供了两种对象诊断特性,一种是利用成员函数AssertValid进行对象有效性检查,这样可以使类在继续运行以前对自己进行正确性检查。另一种是利用成员函数Dump输出对象的数据成员的值,诊断信息以文本形式放入一个数据流中,用于调试器的输出窗口信息显示。这两种诊断只能用于Debug版的应用程序。
(2)CObject类提供了GetRuntimeClass和IsKindOf两个成员函数来支持运行时类型识别。函数GetRunTimeClass根据对象的类返回一个相关联的指向CRuntimeClass结构的指针,它包含了一个类的运行信息;函数IsKindOf用于测试对象与给定类的关系。
(3)序列化是指对象将其状态保存在一个字节流中,并用该字节流重建对象。通过与CArchive相结合,CObject类为其派生类提供了序列化功能。若要创建一个支持序列化的派生类,必须将DECLARE_SERIAL宏添加到类定义中,将IMPLEMENT_SERIAL添加到类的实现文件中。





There are 0 records,
Comment:
Must be registered users to comment(必须是注册用户才能发表评论)

Disclaimer Privacy Policy About us Site Map
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.