WEB开发网
开发学院软件开发VC Visual C++中对象的序列化与文件I/O研究 阅读

Visual C++中对象的序列化与文件I/O研究

 2008-11-13 19:32:36 来源:WEB开发网   
核心提示: 从上述程序代码不难看出,为了能保存绘制结果需要对文档类的成员变量m_nCount和m_ptPosition[100]进行序列化处理,Visual C++中对象的序列化与文件I/O研究(3),而文档类成员函数Serialize()则通过Archive类为这些持久性对象的序列化提供了功能上的支

从上述程序代码不难看出,为了能保存绘制结果需要对文档类的成员变量m_nCount和m_ptPosition[100]进行序列化处理。而文档类成员函数Serialize()则通过Archive类为这些持久性对象的序列化提供了功能上的支持。下面的代码完成了对持久性对象的保存和加载:

if (ar.IsStoring())
{
 // 存储持久性对象到档案
 ar << m_nCount;
 for (int i = 0; i < m_nCount; i++)
  ar << m_ptPosition[i];
}
else
{
 // 从档案装载持久性对象
 ar >> m_nCount;
 for (int i = 0; i < m_nCount; i++)
  ar >> m_ptPosition[i];
}
自定义持久类

为了使一个类的对象成为持久的,可以自定义一个持久类,将持久性数据的存储和加载的工作交由自定义类自己去完成。这种处理方式也更加符合面向对象的程序设计要求。可以通过下面几个基本步骤来创建一个能序列化其成员变量的自定义持久类:

1. 直接或间接从CObject类派生出一个新类。

2. 在类的声明部分包含MFC的DECLARE_SERIAL宏,该宏只需要将类名作为参数。

3. 重载基类的Serialize()函数,并添加对数据成员进行序列化的代码。

4. 如果构造函数没有一个空的缺省的构造函数(不含任何参数),为其添加一个。

5. 在类的实现部分,添加MFC的IMPLEMENT_SERIAL宏。该宏需要三个参数:类名,基类名和一个方案号。其中方案号是一个相当于版本号的整数,每当改变了类的序列化数据格式后就应当及时更改此数值。

根据上述步骤不难对上一小节中的序列化代码进行封装,封装后的持久类CPosition负责对类成员变量m_nCount和m_ptPosition[100]的序列化,封装后的代码如下:

上一页  1 2 3 4 5 6 7  下一页

Tags:Visual 对象 序列化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接