序列化的出发点在于,一个对象的当前状态应该可以永久地存储起来,这些当前状态主要用它的成员变量来表示。然后,这个对象可以通过读取文件或者反串行化重新构造出来。序列化包含了处理所有对象指针细节以及在序列化对象过程中使用的对象的循环引用。序列化的一个关键点在于一个对象负责自己状态的读写,因此,一个可序列化的类必须实现基本的序列化操作。就像在序列化系列文章中看到的,在一个类中加上序列化功能的过程是不复杂的。MFC把CArchive 类作为了要序列化对象与存储介质之间的桥接者。CArchive 类对象总是与一个CFile对象联系在一起(CFile文件可能是一个磁盘文件也可能是一个内存文件,也可能是一个剪贴板文件!),从CFile对象中,CArchive 类对象可以获得必要的序列化信息,这其中包括保存文件名和要进行的操作是读还是写。一个对象可以使用CArchive对象进行序列化操作,这个过程是存储介质无关的。
一、设计一个可序列化类的五个步骤:
- 从CObject类派生出自己的类
- 重载Serialize()函数
- 在类的申明中使用DECLARE_SERIAL 宏
- 定义一个无参数的构造函数(重建对象的时候要用)
- 在类的实现文件中添加IMPLEMENT_SERIAL宏
如果你直接使用Serialize()函数,并不使用CArchive的<<和>>操作符,就可以省去后面的3步。
一个实例如下:一个CPerson类,有两个数据成员