字体
第(2/5)页
关灯
   存书签 书架管理 返回目录
ata 的修改后就可以在CSampleData 类的Serialize()函数中用

    CArchive 的chā入和提取运算符进行串行化。代码如下:

    void CSampleData::Serialize(CArchive& ar)

    {

    CObject::Serialize(ar); //进行基类的序列化

    if (ar.IsStoring()) {

    ar << m_strNcom << m_nType << m_pData; //保存数据

    }

    else {

    ar >> m_strNcom >> m_nType >> m_pData; //读取数据

    }

    }

    在上述代码中,之所以能对自定义的类进行chā入和提取运算,是因为在添加的

    DECLARE_SERIAL()和IMPLEMENT_SERIAL()宏中包含了对chā入和提取运算符的重载。当

    CSampleChildData 对象被写进文件时,这两个宏保证类名和数据一起被写进去;而当从文件

    中读入时,类名被读进来,相应的类的对象被动态构造,这些也是由这两个宏包含的代码实

    现的。当CSampleChildData 对象被构造后,就可以通过Serialize()自动进行串行化,这是由

    于CArchive 的chā入和提取运算符对CObject 类型进行了重载。最后新建的CSampleChildData

    对象的指针即保存在m_pData 中。根据上面的分析,对于自定义的类,不能对类的实例对象

    使用chā入和提取运算符,而只能对类的指针进行这样的cāo作。

    (4)集合类

    由于所有的集合类都是从CObject 类派生出来的,而且集合类都包含了与串行化有关的

    宏调用,因此就可以通过调用集合类的Serialize()成员函数,方便地对集合进行串行化。例如

    一个由CSampleData 对象组成的CArray 集合,调用CArray 的Serialize()函数,就可以使得每

    个CSampleData 对象的Serialize()函数被依次调用,从而完成对集合类的序列化。

    8.1.3 CArchive 类

    在前面的章节中已有关于CArchive 类的介绍,该类提供了一个类型安全的访问CFile 对

    象(CFile 对象是Visual C++中的基本文件对象,将在8.2 节中详细介绍)的机制,用于将可

    串行化对象写入CFile 对象或者从中读取可串行化对象。给定的CArchive 对象可以存储数据,

    也可以加载数据,但不允许同时进行,而且其寿命也只限于将对象写入文件或从文件读取对

    枫叶文学网www.fywxw.com

    第8 章 文件cāo作

    ·181·

    象的一次xìng传递。这也就是MFC 中串行化只能顺序进行的原因。

    下面介绍Carchive 类的一些主要功能。

    1.构造函数

    Carchive 类通过构造函数从已打开的CFile 对象中创建可以向该CFile 对象进行串行化的

    新对象。其原型为:

   
上一页 目录 下一页