编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 编写串行化类
  · 编写串行化类

用户:  大麦
发帖:  430 篇
作品:  0 个
回复:  110 篇
技术分:  1160 分
等级:  
注册:  2010-05-11 09:09:40



发表于:2010-07-13 14:09:19
          楼主

编写串行化类
下面使用CArchive类实现类的串行化。要设计一个具有串行化的类,通常需要进行5个步骤。首先用户定义的类必须派生于CObject或CObject的子类。然后重载Serialize方法,用以保存对象的数据成员到CArchive对象以及从CArchive对象载入对象的数据成员的状态。接着在类体中加入DECLARE_SERIAL宏,这是串行化类所必须的,然后为类提供一个无参数的构造函数,也就是默认构造函数。最后在类的源文件中加入IMPLEMENT_SERIAL宏。下面通过一个示例来介绍如何编写串行化类。
例如,编写串行化类
(1)创建一个基于对话框的工程,工程名称为“Serialize”。
(2)创建一个CSerialClass类,该类派生于CObject。头文件代码如下。
class CSerialClass : public CObject      //定义CSerialClass类
{
public:
 CSerialClass();          //默认构造函数
 DECLARE_SERIAL(CSerialClass)     //添加序列化宏
public:
 int m_Data;         //定义整型的数据成员
 CString m_Text;        //定义字符串类型数据成员
public:
 public:
 virtual void Serialize(CArchive& ar);      //改写虚方法
public:
 virtual ~CSerialClass();       //析构函数
};
(3)编写CSerialClass类源文件代码。
CSerialClass::CSerialClass()       //定义默认构造函数
{
}
CSerialClass::~CSerialClass()       //定义析构函数
{
}
IMPLEMENT_SERIAL( CSerialClass, CObject, 1 )   //添加序列化宏
void CSerialClass::Serialize(CArchive& ar)    //改写Serialize方法,实现序列化
{
 if (ar.IsStoring())        //判断为否为存储数据
 {
  ar<<m_Data<<m_Text;      //向存档对象中写入数据
 }
 else           //加载数据
 {
  ar>>m_Data>>m_Text;      //从存档对象中读取数据
 }
}
(4)处理对话框中“保存对象”按钮的单击事件,保存对象的数据成员。
void CSerializeDlg::OnOK()
{
 CSerialClass serial;          //定义CSerialClass类对象
 CFile file("SerialClass.dat",CFile::modeCreate|CFile::modeWrite); //定义文件对象
 CArchive ar(&file,CArchive::store);       //定义存档对象
 serial.m_Data = 2008;         //设置对象数据成员
 serial.m_Text = "同一个世界,同一个梦想";     //设置对象的数据成员
 serial.Serialize(ar);          //串行化对象,存储数据
}
(5)处理“加载对象”按钮的单击事件,加载文件中的数据到对象的数据成员中。
void CSerializeDlg::OnLoad()
{
 CSerialClass serial;          //定义CSerialClass类对象
 CFile file("SerialClass.dat",CFile::modeRead);     //定义文件对象
 CArchive ar(&file,CArchive::load);       //定义存档对象
 serial.Serialize(ar);          //串行化对象,加载数据
 MessageBox(serial.m_Text,"提示");
}
(6)运行程序,效果如图1所示。
 
图1  串行化

 

本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页