All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
下载:Visual,Studio,2008,Beta,2_[Asp.Net教程]
(asp.net+Access)图片上传到数据库同时显示_[Asp.Net教程]
SQL Server 2005:你应知道的13件事_[SQL Server教程]
Apache伪静态html(URL,Rewrite)设置法_php资料_编程技术
asp.net中Cookie对象的属性和方法
C#中索引器的概念和应用实例
ASP.NET&Spring.NET&NHibernate最佳实践(六)——第3章人事子系统(3)_[Asp.Net教程]
Apache 2.2 完全参考手册(中文版)_[PHP教程]
delphi内存映像的步骤
五种提高SQL性能的方法_[SQL,Server教程]
Reading number is top 10 pictures
The money of more than 100 countries and regions9
From China fortress sora aoi5
人美胸美腿更美3
From China fortress sora aoi2
中国女孩大胆自拍,显露完美身材4
More attractive than sora aoi2
Summer is most suitable for young people to travel in China3
On the verge of extinction of the beach1
来几张有特色的图片
The real super beauty6
Download software ranking
Ashlynn Video1
The Bermuda triangle2
徐若瑄成名作“魔鬼天使”
Unix video tutorial15
Unix video tutorial2
虚拟机汉化软件
Unix video tutorial8
jBuilder2006
apache-tomcat-6.0.33
WebService在.NET中的实战应用教学视频 → 第4集
qq published in(发表于) 2014/7/9 22:38:26 Edit(编辑)
visual c++ MFC的CObject类

visual c++ MFC的CObject类

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添加到类的实现文件中。




添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.