在很多应用中,我们需要保存数据或者从介质中读取数据,这就涉及到文件操作。 我们可以使用各种文件访问方法来完成这些任务,但是MFC还提供了一种简单的读写文件的方法——“序列化”。 序列化机制通过更高层的接口函数为开发者提供了更加人性化、透明的文件操作方法。 例如,您可以将字符串写入文件而不关心具体长度。 读出时也是如此。 您甚至可以操作字符串数组。 借助MFC提供的自动分配内存的类的支持,您可以更轻松地读取/写入数据。 如果需要,您还可以编写具有序列化功能的自己的类。
序列化应该是最底层需要序列化的类支持的,也就是说,如果需要序列化一个类,那么这个类就必须支持序列化。 通过序列化读写文件时,只需要该类的序列化函数即可。
如何让类具有序列化功能? 您需要以下职位:
该类派生自 .
在类声明中包含宏定义。
提供默认构造函数。
在类中实现该函数
使用指定类名称和版本号
以下代码为简单的身份证记录创建一个类,该类也支持序列化。
在H
字符[10];
字符 szID[16];
* p下一个;
};
班级:
:
()
();
〜();
// 序列化相关
*pH头;
//其他成员函数
无效(&ar);
};
在CPP中
(,,1) //为1,版本用于读取数据时检测
无效::(&ar)
整数;
如果(ar.())
{//保存数据
=();//获取链表中的记录条数
;
for(int i=0;i>*(((BYTE*)pID)+j);//一次读取所有数据
//修改链表
当然,上面的代码很不完整,但是已经可以说明问题了。 这是一个可以支持序列化的类,并且可以根据记录数动态分配内存。 在序列化中,我们使用了一个类,该类用于在序列化时提供读写支持,它重载了运算符符号,并提供了Read和Write函数来读写数据。
我们来看看文档中的序列化功能如何使用。 只需要修改文档类的(&ar)函数,调用各个序列化类来读写数据即可。 当然,您也可以在文档类内部读取和写入数据。 下面的代码使用序列化函数来读写数据:
班级:
无效(&ar);
;
;
……
无效::(&ar)
如果 (ar.())
{//既然定义了运算符号,就可以直接使用>>和