C++32实验报告4

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验报告(2014/2015学年第二学期)课程名称面向对象程序设计及C++实验名称实验四:流运算符的重载及文件的使用实验时间2016年5月30日指导单位计算机研究中心指导教师陈景强学生姓名黄巧班级学号B15041608学院(系)计软院专业软件工程(嵌入)1实验报告实验名称流运算符的重载及文件的使用指导教师陈景强实验类型验证实验学时2实验时间4一、实验目的和要求(1)掌握在自定义的类中重载输入流运算符和输出流运算符,并输入/输出本类对象。(2)掌握文件操作的步骤和方法,能利用程序建立数据文件、打开数据文件并进行相关操作。二、实验环境(实验设备)硬件:微型计算机软件:MicrosoftVisualC++6.0三、实验原理及内容实验题目(1):在多态性实验第2题的基础上,在复数类中增加输入流运算符和输出流运算符的重载,主函数通过“cin对象名”输入对象的值,通过“cout对象名”输出对象的值,输出复数值时将原来主函数中“对象名.print()”改成“cout对象名”形式。在上一步完成的基础上,将复数类改成一个类模板,只设一个模板参数,即实部和虚部用同一种类型,修改相应的代码,完成输入、输出功能。实验解答:(1)源代码参考多态性实验第2题。(2)记录重载operator函数的代码:ostream&operator(ostream&s,constComplex&c){coutc.real;if(c.imag!=0){if(c.imag0)cout+;coutc.imagi;}coutendl;returns;}2(3)将类改写成类模板:(多态性实验代码中的重载符号仅保留加法+,其他可省略)#includeiostreamusingnamespacestd;templateclassTclassComplex{private:Treal;Timag;public:Complex(Tr=0,Ti=0){real=r;imag=i;}friendComplexoperator+(constComplex&a,constComplex&b);friendComplexoperator-(constComplex&a,constComplex&b);friendostream&operator(ostream&out,constComplex&a);friendistream&operator(istream&in,constComplex&a);Complexoperator*(constComplex&a);Complexoperator/(constComplex&a);};templateclassTostream&operator(ostream&out,constComplex&a){outa.real;if(a.imag!=0){if(a.imag0)out+;outa.imagi;}outendl;returnout;}templateclassTistream&operator(istream&in,constComplex&a){ina.real;if(a.imag!=0)3{if(a.imag0)in+;ina.imagi;}returnin;}templateclassTComplexToperator+(constComplexT&a,constComplexT&b){ComplexTtemp;temp.real=a.real+b.real;temp.imag=a.imag+b.imag;returntemp;}templateclassTComplexToperator-(constComplexT&a,constComplexT&b){ComplexTtemp;temp.real=a.real-b.real;temp.imag=a.imag-b.imag;returntemp;}templateclassTComplexTComplexT::operator*(constComplexT&a){ComplexTtemp;temp.real=real*a.real;temp.imag=imag*a.imag;returntemp;}templateclassTComplexTComplexT::operator/(constComplexT&a){ComplexTtemp;temp.real=real/a.real;temp.imag=imag/a.imag;returntemp;}voidmain(){Complexdoublea1,a2,a3,a4,a5,a6;couta1=;cina1;4couta2=;cina2;coutoriginala1is:a1endl;coutoriginala2is:a2endl;a3=a1+a2;couta3=a1+a2=a3endl;a4=a1-a2;couta4=a1-a2=a4endl;a5=a1*a2;couta5=a1*a2=a5endl;a6=a1/a2;couta6=a1/a2=a6endl;}实验报告5实验题目2:事先用Windows的记事本建立一个文本文件ff.txt。①编写一个函数voidReadFile(char*s)实现读取以s串为文件名的文本文件的内容在屏幕上显示。②编写一个函数voidChange(char*s1,char*s2)将文本文件中的小写字母全部改写成大写字母生成一个新文件ff2.txt。③主函数中调用ReadFile(ff.txt);显示ff.txt的内容,调用Change(ff.txt,ff2.txt);根据ff.txt文件作修改生成一个新的文件ff2.txt,最后再调用ReadFile(ff2.txt);显示新文件的内容。实验解答:voidReadFile(char*s){charch[100];ifstreaminf(s);if(!inf){coutCannotopenthefile!\n;return;}inf.get(ch);coutchendl;inf.close();}//请完成代码6voidChange(char*s1,char*s2){ifstreamifile(ff.txt);if(!ifile){coutff.txtcannotbeopenned!endl;return;}ofstreamofile(d:\\temp\\ff2.txt);if(!ofile){coutff2.txtcannotbeopenned!endl;return;}charch;while(ifile.get(ch)){ch=ch-32;ofile.put(ch);}ifile.close();ofile.close();}//请完成代码实验题目3(选做):定义学生类,该类包含学生的一些基本信息:学号、姓名、性别、成绩。定义流对象,实现用write函数将学生信息以二进制方式写到磁盘文件stu.dat中。再用read将磁盘中的学生信息读到内存显示在屏幕上。实验解答:(1)Student::Student(char*nu,char*na,char*se,ints)//构造函数{}ostream&operator(ostream&out,constStudent&s)//重载输出运算符{7}(2)voidCreateBiFile(char*filename){ofstreamout(filename);tudentstu[3]=______________________________________________//对象数组的初始化out.write(_______________________________);//两个实在参数自己填写out.close();}(3)voidReadBiFile(char*filename){Studentstu[num];inti=0;ifstreamin(filename);while(!in.eof())//读出记录并显示in.close();}实验报告8四、实验小结(包括问题和解决方法、心得体会、意见与建议等)1.在题目(1)中,是否可以将模板参数改为两个使得实部和虚部类型可以不同,有什么好处?可以,对于一个对复数实部和虚部数据类型有不同要求的设计,可以轻松实现。2.在题目(2)中如将主函数作如下修改,请补充完整程序:intmain(){chars1[20],s2[20];cins1s2;//从键盘上输入要操作的文件名Change(__s1,s2_____________________);//调用Change函数将s1串为文件名的内容修改后保存到以s2串为文件名的文本文件中ReadFile(__s2_____________________);//读取s2串为文件名的文本内容return0;}3.其它问题及解决方法:4.心得体会:我学会了流运算符的重载和文件的使用。五、指导教师评语成绩批阅人日期

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功