实验4 流运算符的重载及文件的使用.docx

上传人:b****5 文档编号:6148339 上传时间:2023-01-04 格式:DOCX 页数:12 大小:18.01KB
下载 相关 举报
实验4 流运算符的重载及文件的使用.docx_第1页
第1页 / 共12页
实验4 流运算符的重载及文件的使用.docx_第2页
第2页 / 共12页
实验4 流运算符的重载及文件的使用.docx_第3页
第3页 / 共12页
实验4 流运算符的重载及文件的使用.docx_第4页
第4页 / 共12页
实验4 流运算符的重载及文件的使用.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验4 流运算符的重载及文件的使用.docx

《实验4 流运算符的重载及文件的使用.docx》由会员分享,可在线阅读,更多相关《实验4 流运算符的重载及文件的使用.docx(12页珍藏版)》请在冰豆网上搜索。

实验4 流运算符的重载及文件的使用.docx

实验4流运算符的重载及文件的使用

 

西华大学

实验报告

(2010/2011学年第二学期)

 

课程名称

面向对象程序设计

实验名称

流运算符的重载及文件的使用

实验时间

指导单位

指导教师

 

学生姓名

班级学号

学院(系)

专业

实验报告

实验名称

流运算符的重载及文件的使用

实验类型

验证

实验学时

2×2

一、实验目的和要求

(1)掌握在自定义的类中重载输入流运算符>>和输出流运算符<<,并输入/输出本类对象。

(2)掌握文件操作的步骤和方法,能利用程序建立数据文件、打开数据文件并进行相关操作。

 

二、实验环境(实验设备)

硬件:

微型计算机

软件:

MicrosoftVisualC++6.0

三、实验原理及内容

实验题目

(1):

在上一次实验的基础上,在复数类中增加输入流运算符>>和输出流运算符<<的重载,主函数通过“cin>>对象名”输入对象的值,通过“cout<<对象名”输出对象的值,输出复数值时将原来主函数中“对象名.print()”改成“cout<<对象名”形式。

实验解答:

1写出在复数类中增加的输入流运算符>>和输出流运算符<<的重载函数完整代码:

ostream&operator<<(ostream&out,constComplex&a)

{

out<

if(a.imag!

=0)

{

if(a.imag>0)

out<<"+";

out<

}

out<

returnout;

}

 

istream&operator>>(istream&in,constComplex&a)

{

in>>a.real;

if(a.imag!

=0)

{

if(a.imag>0)

in>>"+";

in>>a.imag>>"i";

}

returnin;

}

 

②写出主函数中调用流运算符函数的主要代码(对算术运算符重载函数的调用可以忽略)

voidmain()

{

Complexa1,a2;

cout<<"a1=";

cin>>a1;

cout<<"a2=";

cin>>a2;

cout<<"originala1is:

"<

cout<<"originala2is:

"<

}

 

实验报告

③在上一步完成的基础上,将复数类改成一个类模板,只设一个模板参数,即实部和虚部用同一种类型,修改相应的代码,完成输入、输出功能。

只保留+、-、>>、<<运算符重载的定义及调用,写出完整的程序代码。

#include

usingnamespacestd;

template

classComplex

{

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);

};

template

ostream&operator<<(ostream&out,constComplex&a)

{

out<

if(a.imag!

=0)

{

if(a.imag>0)

out<<"+";

out<

}

out<

returnout;

}

template

istream&operator>>(istream&in,constComplex&a)

{

in>>a.real;

if(a.imag!

=0)

{

if(a.imag>0)

in>>"+";

in>>a.imag>>"i";

}

returnin;

}

template

Complexoperator+(constComplex&a,constComplex&b)

{

Complextemp;

temp.real=a.real+b.real;

temp.imag=a.imag+b.imag;

returntemp;

}

template

Complexoperator-(constComplex&a,constComplex&b)

{

Complextemp;

temp.real=a.real-b.real;

temp.imag=a.imag-b.imag;

returntemp;

}

template

ComplexComplex:

:

operator*(constComplex&a)

{

Complextemp;

temp.real=real*a.real;

temp.imag=imag*a.imag;

returntemp;

}

template

ComplexComplex:

:

operator/(constComplex&a)

{

Complextemp;

temp.real=real/a.real;

temp.imag=imag/a.imag;

returntemp;

}

voidmain()

{

Complexa1,a2,a3,a4,a5,a6;

cout<<"a1=";

cin>>a1;

cout<<"a2=";

cin>>a2;

cout<<"originala1is:

"<

cout<<"originala2is:

"<

a3=a1+a2;

cout<<"a3=a1+a2="<

a4=a1-a2;

cout<<"a4=a1-a2="<

a5=a1*a2;

cout<<"a5=a1*a2="<

a6=a1/a2;

cout<<"a6=a1/a2="<

}

 

实验报告

实验题目

(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");显示新文件的内容。

实验解答:

根据实验提示完成实验,完整的程序代码如下:

#include

#include

voidReadFile(char*s);

voidChange(char*s1,char*s2);

voidmain()

{

ReadFile("ff.txt");

Change("ff.txt","ff2.txt");

ReadFile("ff.txt");

}

voidReadFile(char*s)

{

charch[100];

ifstreaminf(s);

if(!

inf)

{

cout<<"Cannotopenthefile!

\n";

return;

}

inf.get(ch);

cout<

inf.close();

}

voidChange(char*s1,char*s2)

{

ifstreamifile("ff.txt");

if(!

ifile)

{

cout<<"ff.txtcannotbeopenned!

"<

return;

}

ofstreamofile("d:

\\temp\\ff2.txt");

if(!

ofile)

{

cout<<"ff2.txtcannotbeopenned!

"<

return;

}

charch;

while(ifile.get(ch))

{

ch=ch-32;

ofile.put(ch);

}

ifile.close();

ofile.close();

}

 

实验报告

实验题目(3):

定义学生类,该类包含学生的一些基本信息:

学号、姓名、性别、成绩。

定义流对象,实现用write函数将学生信息以二进制方式写到磁盘文件stu.dat中。

再用read将磁盘中的学生信息读到内存显示在屏幕上,对读出的记录按总分进行排序后,再将学生信息以二进制方式写到磁盘文件stuSort.dat中。

程序中定义CreateBiFile()函数建立二进制文件,定义ReadBiFile()函数读出二进制文件内容并显示,定义Sort()函数按总分进行排序。

实验解答:

根据实验提示,完整的程序代码如下:

#include

#include

#include

classStudent

{

charnum[10];

charname[10];

charsex[3];

intscore;

public:

Student(char*nu="",char*na="",char*se="",ints=0);

friendostream&operator<<(ostream&out,constStudent&s);

};

Student:

:

Student(char*nu="",char*na="",char*se="",ints)

{

strcpy(num,&nu);

strcpy(name,&na);

strcpy(sex,&se);

score=s;

}

ostream&operator<<(ostream&out,constStudent&s)

{

out<<"\nNumber:

"<

"<

"<

"<

returnout;

}

voidCreateBiFile(char*filename)

{

ofstreamout(filename);

Studentstu[3]="'0001','王平','女',97";

out.write(stu,20);

out.close;

}

voidReadBiFile(char*filename)

{

Studentstu[3];

inti=0;

ifstreamin(filename);

while(!

in.eof())

out<

in.close;

}

voidmain()

{

CreateBiFile("stu.dat");

ReadBiFile("stu.dat");

}

实验报告

四、实验小结(包括问题和解决方法、心得体会、意见与建议等)

1.你认为在自定义类中重载输入/输出流运算符有什么意义?

方便用户采取“cin>>变量名”的输入方式和“cout<<表达式”的输出方式

实现用户自定义类型数据的输入和输出。

2.在文件操作中read和write这一对函数适合于读写哪一种类型的数据?

read()与write()函数一般成对使用,既可以用于对文本文件的读写,也可以用于

对二进制文件的读写,每次读写一个数据块,一般主要用于对二进制文件的读写。

3.题目(3)的学生信息可以以文本文件的形式存储吗?

可以。

4.其它问题及解决办法:

1,自定义类中重载输入/输出流运算符后的变量是对象;

2,打开文件后要判断文件是否正确打开,并且打开文件后一定要主要关闭文件。

5.心得体会:

通过本次试验我熟练的掌握了输入\输出运算符重载的运用,并深刻体会到了它

的方便性;采用文件的方式操作文件能够很好的保持,输出信息。

 

五、指导教师评语

成绩

批阅人

日期

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1