南京邮电大学C++实验报告4(仅供参考)

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

一、 实验目的和要求
(1)掌握在自定义的类中重载输入流运算符>>和输出流运算符<<,并输入/输出本类对象。
(2)掌握文件操作的步骤和方法,能利用程序建立数据文件、打开数据文件并进行相关操作。

二、实验环境(实验设备)
硬件: 微型计算机
软件: Windows 操作系统、Microsoft Visual Studio 2010

三、实验原理及内容(中文五号宋体,英文五号Consolas字体,单倍行距)
实验题目1: 文件(可事先用记事本建立)d:\course.txt 中存储有若干门课的课程名称和对
应选课人数,存储形式示意如下(真正的记录未必是3 条)。
高级语言程序设计 3018
面向对象程序设计及c++ 487
程序设计(实践) 2046
定义类Course,有2 个私有数据成员表达课程名称和对应选课人数,类中重载提取运算符“>>”和插入运算符“<<”,分别用于从文件中读取信息以及向屏幕输出信息。主函数中定义ifstream 对象以及Course 类的对象,通过“>>”依次读取文件记录,再通过“<<”输出至屏幕。最后输出共有多少条记录。

实验解答:
(1) 参考实验指导教材中Course类的定义,给出在类外实现重载提取运算符“>>” 的函数定义:

istream &operator>>(istream &in,Course &p)
{
	in>>p.name;
	in>>p.number;
	return in;
}

(2) 参考实验指导教材中Course类的定义,给出在类外实现重载插入运算符“<<” 的函数定义:

ostream &operator<<(ostream &out,const Course &p)
{
	out<<p.name<<"  "<<p.number<<endl;
	return out;
}

实验题目2:事先用Windows的记事本建立一个文本文件ff.txt。
① 编写一个函数void ReadFile(char* s)实现读取以s串为文件名的文本文件的内容在屏幕上显示。
② 编写一个函数void Change(char *s1,char *s2)将文本文件中的小写字母全部改写成大写字母生成一个新文件ff2.txt。
③ 主函数中调用ReadFile(“ff.txt”);显示ff.txt的内容,调用Change (“ff.txt” ,“ff2.txt”);根据ff.txt文件作修改生成一个新的文件ff2.txt,最后再调用ReadFile(“ff2.txt”);显示新文件的内容。
实验解答:
void ReadFile(char *s) //请完成代码

void ReadFile(string s)
{
	string str;
	ifstream in(s);
	if(!in)
	{
		cout<<"s cannot be opened!"<<endl;
		return ;
	}
	getline(in,str);
	cout<<str<<"\n";
	in.close();
}

void Change(char *s1,char *s2) //请完成代码

void Change(string s1,string s2)
{
	ifstream in(s1);
	if(!in)
	{
		cout<<"s1 cannot be opened!"<<endl;
		return ;
	}
	ofstream out(s2);
	if(!out)
	{
		cout<<"s2 cannot be opened!"<<endl;
		return ;
	}
	char ch;
	while(in.get(ch))
		out.put(ch-32);
	in.close();
	out.close();
	return ;
}

四、实验小结(包括问题和解决方法、心得体会、意见与建议等)
(中文五号宋体,英文五号Times new roman字体,单倍行距)
(一)实验中遇到的主要问题及解决方法

  1. 在题目(1)中,要求重载“>>”和“<<”以方便地实现输入和输出,结合第三次实验中这两个运算符的重载,理解为什么“>>”和“<<”既可以用于键盘输入/屏幕输出和文件读写?

重载流操作符<<和>>时,如果第一个参数的类型为ostream和istream,那么这个重载函数既可以用于标准输入输出流,也可以用于文件流上。ostream和istream是标准输入输出流、文件流、字符串流的基类。

  1. 在题目(2)中如将主函数作如下修改,请补充完整程序:
    int main( )
    { char s1[20],s2[20];
    cin>>s1>>s2; //从键盘上输入要操作的文件名
    Change(__s1,s2);
    //调用Change函数将s1串为文件名的内容修改后保存到以s2串为文件名的文本文件中
    ReadFile(_s2); //读取s2串为文件名的文本内容
    return 0;
    }
    3.其它问题及解决方法

无。

(二)实验心得

学习新知识要多实践巩固复习。

(三)意见与建议(没有可省略)

五、支撑毕业要求指标点
1.2-M掌握计算机软硬件相关工程基础知识,能将其用于分析信息安全领域的相关工程问题。
3.1-H掌握信息安全领域所涉及的软硬件系统,从数字电路、计算机系统、到各类系统软件的基本理论与设计结构。

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页