为C++程序添加文件保存加载功能

为C++程序添加文件保存加载功能,第1张

为C++程序添加文件保存加载功能,第2张

一.导言

为什么要浪费时间设计一个算法来实现数据的文件存储和调试代码呢?Boost库可以帮你做这些事情。在序列化模板的帮助下,您可以轻松地将数据存储在自己的自定义格式文件中。本文将教你如何轻松地存储数据和读回数据。

二。概观

当你开发一个软件包时,你总是想专注于软件的功能。最让你担心的是,你花了很多时间写代码,这些代码可能会应用到大量的其他程序上。这就是重用的意思。您会希望别人为您编写这样的现成代码。

这类问题的一个很好的例子就是让你的程序有存档的能力。举个例子,你可能正在编写一个最伟大的天文学程序——在这个程序中,你的用户可以很容易地输入时间和坐标,你的程序负责映射当前的日子空。然而,假设你给你的用户突出显示某些星星的能力,这样他们可以很容易地在地图上被突出显示。最后,您可以让用户保存他们的配置供以后使用。

你的项目侧重于天文编程。你写的不是一个保存文档的通用库,所以你不用在存储功能上花很多时间,因为你要专注于程序的天文特性。如果是用C++编程,可以从Boost复用库获得帮助。为了保存文件,Boost库包含了一个序列化类,这正是您所需要的。

如果您成功地创建了您的程序项目,很可能会有一个包含用户信息或文档的类。例如,您可能有一个列出用户喜爱的明星的名字和位置的类。(此处简化请见谅)。这是您希望用户保存到磁盘的数据。毕竟几乎所有的程序都有文件保存功能。Microsoft Word保存文本和格式化数据,而Excel保存工单数据。一个优秀的地图程序允许用户保存他们喜欢的位置、GPS路线、旅程等等。

在Boost序列化库的帮助下,保存很容易——你所要做的就是设置你的类,库会处理其他一切——这样你就可以专注于你的实际工作。

想法很简单:创建一个包含用户数据的对象。当准备好保存信息时,用户可以选择文件|另存为,然后从文件对话框中选择文件名。在Boost的帮助下,你的程序会把数据保存到选定的文件中。将来,当用户重新启动程序时,选择File|Open,选择保存的文件,您的程序再次使用Boost-但是这次数据被重新加载,因此对象被重新生成。你看,用户数据已经回复了!或者,从用户的角度来看,文档已经被打开了。

下面的例子简单地演示了保存和加载一些图形类。第一个类Vertex描述了一个二维点。第二个类Polygon包含顶点实例的容器。第三个类Drawing包含一个多边形容器。

把这些东西都存到一个文档里无疑是一场噩梦——这不是一个很费时间的地方——你要实现图形化编程,因为这是你的专长。好的,让Boost库为您做所有其他的事情。

3.序列化类

首先,考虑顶点类。这个类是最容易序列化的,因为它不包含其他对象。这个类包含两个值,x和y,都是double。我还定义了几个函数来访问这个类的x和y,以及一个dump函数,它负责将x和y的值传送到控制台。最后,我包含了两个构造函数,一个是默认的,另一个用作输入参数。(为了简单起见,这个例程不做任何实际的绘制。不好意思!)

下面最吸引人的部分是序列化该类的必要代码行。下面是这个类(注意粗体部分):

类顶点{
private:
friend类boost::serialization::Access;
模板
void serialize(Archive & ar,const unsigned int version)
{
ar & x;
ar & y;
}
双x;
双y;
public:
vertex(){ }//序列化需要一个默认构造函数
vertex (double newx,double newy): x (newx),y(newy){ }
double getx()const { return。}
double getY()const { return y;}
void dump(){
cout v2;
ifs . close();
v2 . dump();

这段代码生成Vertex的一个实例,然后打开一个文件(这次是为了读取),将一个序列化类与该文件相关联,读入对象,然后关闭该文件。最后,代码输出顶点的值。如果将前面两个程序段放在一个main函数中运行,会看到输出两个原始值:1.5和2.5。

注意

请注意,我使用的文件扩展名是:。vtx。这不是一个特殊的扩展;这是我自己定制的扩展。这听起来很傻很琐碎,但事实上,我们正在创建自己的文件格式。为了指出这种特殊的文件格式,我使用了扩展名。vtx,意思是顶点。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 为C++程序添加文件保存加载功能

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情