Linux高级编程实验实验2报告.docx
- 文档编号:8688545
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:11
- 大小:597.44KB
Linux高级编程实验实验2报告.docx
《Linux高级编程实验实验2报告.docx》由会员分享,可在线阅读,更多相关《Linux高级编程实验实验2报告.docx(11页珍藏版)》请在冰豆网上搜索。
Linux高级编程实验实验2报告
电子科技大学
实验报告
学生姓名:
学号:
指导教师:
林
实验地点:
清水河主楼A2-412实验时间:
2016.11.16
一、实验室名称:
Linux环境高级编程实验室
二、实验项目名称:
对象序列化实验
三、实验学时:
8学时
四、实验目的:
学习序列化原理与方法,掌握基本的序列化技巧
五、实验容:
●版本1:
将一个类的一个对象序列化到文件
●版本2:
将一个类的多个对象序列化到文件
●版本3:
将两个类的多个对象序列化到文件
●版本4:
按照面向对象的方法,解决多个类的多个对象序列化到文件的问题
●版本5:
序列化的目的地不仅可以是文件,还可以是其他,即可配置性
六、实验步骤:
1、版本一程序分析:
源程序如下,功能是将一个类的一个对象()序列化到文件:
#include
#include
#include
#include
classSAD//SerializeAndDeserialize
{
public:
SAD()//构造函数。
{
tel0=tel1=0;//将分成两个int变量保存。
}
explicitSAD(longintm,longintk)
{
tel0=m;tel1=k;
}
virtual~SAD()
/*使用虚析构。
在析构时防止只析构基类而不析构派生类的状况发生,造成存泄漏。
*/
{
}
public:
voidreshow()//用于打印出变量的值。
{
std:
:
cout<<"TELofrecovery:
"< : endl; } public: voidshow()//用于打印出的值。 { std: : cout<<"TELbeforeSerialize: "< : endl; } public: boolxuliehua(constchar*lujing)const /*非静态成员函数后面加了const的成员函数可以被非const对象和const对象调用。 */ { intfd=: : open(lujing,O_RDWR|O_CREAT|O_TRUNC,0); /*open函数位于fcntl.h中。 open函数用于打开和创建文件。 pFilePath表示文件名,参数O_RDWR表示以可读写方式打开文件.O_CREAT表示若欲打开的文件不存在则自动建立该文件.O_TRUNC表示若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的资料也会消失.若所有欲核查的权限都通过了检查则返回0值,表示成功,只要有一个权限被禁止则返回-1.*/ if(-1==fd) returnfalse; if((: : write(fd,&tel0,sizeof(longint)))&&(: : write(fd,&tel1,sizeof(longint)))==-1) /*write是用于向文件中写数据的函数。 fd只是一个整数,在open时产生。 起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp。 从tel0的地址起,写入sizeof(longint)个字符。 */ { : : close(fd);//释放file结构体。 returnfalse; } if(: : close(fd)==-1) returnfalse; returntrue; } boolfanxuliehua(constchar*lujing)//反序列化,参数是文件名以及路径。 { intfd=: : open(lujing,O_RDWR);//以读写方式打开。 if(-1==fd) returnfalse;//打开失败。 intr=(: : read(fd,&tel0,sizeof(longint)))&&(: : read(fd,&tel1,sizeof(longint))); if(-1==r) { : : close(fd); returnfalse;//读失败。 } if(: : close(fd)==-1) returnfalse; returntrue; } private: longinttel0,tel1;//赋值变量。 }; intmain() { { SADa(135479,35899); a.show();//显示序列化前的。 a.xuliehua("data");//序列化。 } { SADa; a.fanxuliehua("data"); a.reshow();//显示序列化后的。 } return0; } 执行编译并运行后的运行结果如下图1.1: 图1.1版本一序列化运行结果 流程图如下: 开始 初始化 序列化电话号码 显示数据 反序列化 显示恢复后号码 结束 图1.2版本一程序流程图 2、版本二程序分析: 部分原代码如下图2.1,功能为将一个类的多个对象序列化到文件(截图是在图形界面的虚拟终端下进行的,因为我在终端模式下查看的中文注释是乱码): (a)头文件 (b)序列化子程序 (c)显示程序 (d)反序列化子程序 (e)主程序 图2.1版本二代码图 然后切换到终端模式,g++编译运行,得到预期结果,序列化完成。 图2.2运行结果 3、版本三程序分析: 版本三的功能是,将两个不同类的多个对象序列化到文件中。 其主函数部分代码如图3.1 图3.1主函数代码 经过g++编译运行后,得到结果如下图3.2: 图3.2运行结果 其程序流程图如下3.3: 图3.3程序流程图 4、版本四程序分析: 本程序实现了将三个不同的类的多个对象序列化到文件,采用面向对象的方法,查找变化点,抽象出需要进行序列化的基类。 当又有新的类的对象,需要序列化到文件时,不需要修改已有的代码。 其代码如下图4.1所示。 图4.1主函数代码 通过g++编译再运行得到结果如图4.2: 图4.2程序结果 5、版本五程序: 本程序的主函数如下图5.1所示: 图5.1主程序 运行结果如下图5.2所示: 图5.2运行结果 七、总结及心得体会: 在本次实验中: 1、我理解了序列化的涵。 它是将对象的状态信息转换为可以存储或传输的形式的过程。 序列化时,把对象及其当前状态写入到临时或持久性存储区。 反序列化时,就可以通过从存储区中读取对象的状态,从而重新创建被存储的对象。 2、学会了基本的序列化操作,比如将一个类的一个对象序列化到文件、将一个类的多个对象序列化到文件、将两个类的多个对象序列化到文件以及按照面向对象的方法,解决多个类的多个对象序列化到文件的问题。 八、对本实验过程及方法、手段的改进建议: 此次实验整体顺利,同学们可以在课后尝试更多的序列化方法。 积极创新,提高技能。 该实验让我学到了许多实际的原理与思想。 老师讲课层层递进,给了我们充足时间练习。 报告评分: 指导教师签字:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 高级 编程 实验 报告