轻松学visual c++之文档与串行化

轻松学visual c++之文档与串行化

ID:21958668

大小:414.78 KB

页数:19页

时间:2018-10-21

轻松学visual c++之文档与串行化_第1页
轻松学visual c++之文档与串行化_第2页
轻松学visual c++之文档与串行化_第3页
轻松学visual c++之文档与串行化_第4页
轻松学visual c++之文档与串行化_第5页
资源描述:

《轻松学visual c++之文档与串行化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第11章文档与串行化MFC程序通过文档与串行化,可以非常方便的操作数据。我们可以把文档看做是数据的载体。当程序启动,从磁盘文件中读取对象数据,然后在内存中构建相应的对象。这种让对象数据持久性存在的过程就称之为串行化。本章主要学习CArchive类的使用和将一个类实现串行化功能,以及MFC程序读取、保存文档的执行流程等内容。11.1CArchive和SerializeMFC提供的CArchive类实现了一种新的读写文件方式。我们可以通过CArchive类将对象数据保存到磁盘上或从磁盘上读取对象数据。如果CArchive类和Serialize()函数配合使用不仅可以体现C

2、Archive类功能的强大,而且使数据的加载和保存更加方便和清晰。11.1.1CArchive类介绍我们可以把CArchive对象当成是一种二进制流。就像一个输入/输出流一样,把一个CArchive对象看成是文件之前的一个内存缓冲区。与输入/输出流不同的是,CArchive对象以一种有效的、非冗余的格式处理二进制对象数据。CArchive对象不仅可以处理基本类型的数据,还可以处理CObject类的派生类对象。CArchive类重载了析取(>>)和插入(<<)操作符,为用户提供了一种方便的对象存档编程接口。在CArchive类中,这两种操作符都有多种重载形式。通过这些重

3、载函数,我们可以利用CArchive对象来完成文件的读写操作。11.1.1CArchive类介绍CArchive类的声明如下所示。11.1.2CArchive类的使用在程序中使用CArchive对象时,首先要创建一个CFile类或其派生类对象。又因为存档对象既可以用来加载数据,也可以用来保存数据,所以必须确保这个CFile类对象打开方式和CArchive对象的加载/保存状态相一致。当要实例一个CArchive对象时,则需要将其与一个CFile类对象相关联。要注意,一个文件对象(CFile类对象)只能与一个存档对象(CArchive对象)相关联。下面我们通过编写一个处理

4、员工信息的对话框程序,来展现CArchive类在处理多组且不同类型数据时所表现的强大功能。11.1.3使一个类具备串行化能力如果一个类的对象可以使用CArchive进行保存和加载,我们就称这个类可串行化。前面在第一小节我们提到CArchive不仅重载了各种类型的插入(<<)和析取(>>)操作符,而且还可以处理CObject类对象的数据。下面我们要对上一小节的程序进行改造,使CArchive存档对象实现对员工信息类对象的读取和保存。11.1.3使一个类具备串行化能力如果要让一个对象有串行化(Serialize)能力,即能通过CArchive类进行存档和读取操作。必须满足

5、下列5个条件,CObject只是其中之一。从CObject派生下来。如此就可以具备好多MFC特有的功能,如类型识别、动态创建等。类声明中必须有DECLARE_SERIAL宏。此宏需要一个参数,即需要串行化类的名称。类实现部分必须有IMPLEMENT_SERIAL宏。此宏需要三个参数,即类名称、基类名称和版本号。改写Serialize()虚函数,使它能够适当的把类的成员变量写入文件。此类必须有一个无参数的构造函数。因为若一个对象来自文件,MFC必须先动态创建它。而且在没有任何参数的情况下调用其构造函数,然后才从文件中读出对象数据。11.1.4在Serialize()函数

6、中实现串行化这一小节我们将继续对上面的例子进行改进。在CTest1Dlg类中改写Serialize()虚函数实现对数据的保存和读取操作,使代码更加条理化。因为在MFC中Serialize()函数其实就是数据读写的标志,也为后面章节中改写文档类程序的Serialize()函数做铺垫。11.2文档程序的串行化流程串行化即Serialize,在文档程序中扮演着重要的角色。文档程序往往要处理大量的数据,然后通过视类来显示。这些数据的保存和加载都是通过文档类中的Serialize()函数来完成。了解Serialize()函数的来龙去脉可以使我们在利用Serialize()函数的

7、时候更加得心应手。11.2.1新建文档流程当我们单击文档程序工具栏上的“新建”按钮时,文档程序就会自动为我们创建好一个视图窗口。在这一小节,我们将介绍它是怎么实现的,以及剖析MFC实现新建文档时的执行流程。每当有一份文档产生时,总是会产生一个文档类对象、框架类对象和视类对象,由它们三个共同服务于即将处理的文档。将新建文档的调用顺序进行整理,如下图所示。11.2.1新建文档流程11.2.2保存文档流程在上一节中,我们在对话框中进行保存和读取操作,都是通过在其消息响应函数中的代码完成的,包括最后一小节调用我们重写的Serialize()函数。读者已经知道

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。