设为首页 加入收藏

TOP

Visual C++串行化编程(三)
2012-11-04 15:20:08 来源: 作者: 【 】 浏览:759
Tags:Visual 串行 编程

  可串行化对象(Serializable Object)

  要利用示例代码7中的方式进行文件I/O的一个基本条件是:m_Obj_a等对象必须是可串行化的对象。一个可串行化对象的条件为:

  这个类从CObject派生)

  该类实现了Serialize函数

  该类在定义时使用了DECLARE_SERIAL宏

  在类的实现文件中使用了IMPLEMENT_SERIAL宏

  这个类有一个不带参数的构造函数,或者某一个带参数的构造函数所有的参数都提供了缺省参数

  这里,可串行化对象条件中没有包括简单类型,对于简单类型,CArchive基本都实现了运算符<<和>>的重载,所以可以直接使用串行化方式进行读写。

  从CObject类派生

  串行化要求对象从CObject派生,或者从一个CObject的派生类派生。这个要求比较简单,因为几乎所有的类(不包括CString)都是从CObject 派生的,因此对于从MFC类继承的类都满足这个要求。对于自己的数据类,可以指定它的基类为CObject来满足这个要求。

  实现Serialize函数

  Serialize函数是对象真正保存数据的函数,是整个串行化的核心。其实现方法和CMyDoc::Serialize一样,利用CArchive::IsStoring和CArchive::IsLoading 判断当前的操作,并选择<<和>>来保存和读取对象。

  使用DECLARE_SERIAL宏

  DECLARE_SERIAL宏包括了DECLARE_DYNAMIC和DECLARE_DYNCREATE功能,它定义了一个类的CRuntimeClass相关信息,并实现了缺省的operator >> 重载。实现了该宏以后,CArchive就可以利用ReadObject和WriteObject来进行对象I/O,并能够在事先不知道类型的情况下从文件中读对象。

  使用IMPLEMENT_SERIAL

  DECLARE_SERIAL宏和IMPLEMENT_SERIAL宏必须成对出现,否则DECLARE_SERIAL宏定义的实体将无法实现,最终导致连接错误。

  缺省构造函数

这是CRuntimeClass::CreateObject对对象的要求。

  特殊情况

  只通过Serialize函数对对象读写,而不使用ReadObject/WriteObject和运算符重载时,前面的可串行化条件不需要,只要实现Serialize 函数即可。

  对于现存的类,如果它没有提供串行化功能,可以通过使用重载友元operator <<和operator >>来实现。

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇利用Win32API开发串行通信程序 下一篇Visual C++编程中的文件操作

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: