17.3.3 序列化元素类(3)

2013-10-07 16:13:02 · 作者: · 浏览: 64

17.3.3  序列化元素类(3)

首先调用基类Serialize()函数,处理继承的类成员的序列化。存储矢量内容所用的技术与序列化文档列表所用的技术基本相同。首先将容器中的元素数量写入存档,然后再将元素本身写入存档。CPoint类是可序列化的,所以它本身可以负责处理。读取这些点所采用的技术同样很简单。只需要在for循环中将从存档读取的每个对象存储到矢量m_Points中。序列化过程使用CCurve类无参数的构造函数来创建基类对象,因此vector<CPoint>成员在此过程中创建。

需要将Serialize()函数的实现添加到最后一个类CText中:

  1. void CText::Serialize(CArchive& ar)  
  2. {  
  3. CElement::Serialize(ar);                                            // Call the base class function  
  4. if (ar.IsStoring())  
  5. {  
  6. ar << m_String;                                                         // Store the text string  
  7. }  
  8. else  
  9. {  
  10. ar >> m_String;                                                             // Retrieve the text string  
  11. }  
  12. }  

在调用了基类函数以后,利用ar的插入和析取运算符序列化m_String数据成员。尽管CString类不是派生于CObject,但是具有这些重载运算符的CArchive仍然完全支持它。