串行化

串行化(持久化):
   实质:保存到文件及从文件中读出来
  
   用面向对象的思想解决了数据的保存和读取


串行化的步骤:


1、读还是写,实例化两个文件对象
  CFile file1("E://1.txt",//...);//reader
  CFile file2(//...);            //write

2、用CFile对象作为构造函数的参数,实例化CArchive对象:
   CArchive ar(file1 或 file2);

   然后调用文档的Serialize函数
   CDoucment::Serialize(ar);

   通过第二步,就转到了文档-视图框架的文档对象的Serialize函数内

3、在文档的Serialize函数内,读写(串行化)该文档管理的数据:

   要区分数据类型:
  
   3.1:内置类型
        直接调用<<(存)或>>(读)

   3.2:类类型

        3.2.1:在对象指针上直接调用<<或>>,
               技术要求:在类的定义和实现内添加“串行化宏”,同时添加Serialize函数
        3.2.2:调用该对象的Serialize函数,技术要求:添加Serialize函数

              注明:被串行化的对象的Serialize函数,负责串行化该对象的数据成员。

   3.3数据类型

        3.3.1:写的时候,便利整个数据集存储的对象,
               将每个对象进行串行化(然后区分独享类型,重复做3.1、3.2、3.3的工作)
               读的时候,一般是定义父类型指针(初始化为空),然后在该指针上进行串行化(>>)
        3.3.2:直接调用数据集类的成员函数Serialize

              注明:如果数据集类存储的是类对象,并且类对象有继承层次,
                    必须在每个类上添加“串行化宏”,Serialize函数可以选择性的继承

总说明:以上1、2两步工作是由文档-视图框架来自动完成的。如果是基于对话框的程序,
        要实现串行化机制,1、2两步程序员自己实现

串行化的技术要求:

   1、用户自定义的类必须从CObject派生

   2、在类内覆盖Serialize函数(重载实现)
      负责类内数据成员得保存和读取:

      2.1、对于内置类型,直接调用CArchive的<<和>>运算符函数实现串行化
      2.2、对于类类型对象,可以直接调用该对象的Serialize函数,也可以
           调用CArchive的<<和>>对对象的调用
      2.3、对于MFC数据基类(动态数组、链表词典)的串行化,直接调用该类
           成员函数Serialize

   3、必须和CArchive对象联合工作,实现对象的读和写
      CArchive的功能:关联CFile对象,以进行硬盘的读写;调用被串行化的类对象的
      Serialize函数

   4、可以在类的定义文件内添加宏:DECLARE_SERIAL;在类的实现文件内
      添加宏:IMPLEMENT_SERIAL。这样可以在串行化时,可以不调用对象的Serialize,
      而是用<<和>>实现对象的读写。

   5、如果不是基于文档-视图框架,必须构造CFile对象和CArchive对象,然后调用要串行化
      的类对象的Serialize函数,才能实现文件读写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值