第7章 输入输出流-【千锋教育】C++语言程序设计
2023-03-21
|
67页
|
90人阅读
|
0人下载
教辅
内容正文:
流的概念
输入/输出流类库
标准输入/输出流
第7章 输入/输出流
格式化输入/输出
文件流
字符串流
1
理解流的概念
理解字符串流
熟悉输入/输出流类库
掌握标准输入/输出流、格式化输入/输出流、文件流
学 习 目 标
LEARNING OBJECTIVES
初心至善 匠心育人
流的概念
输入/输出流类库
标准输入/输出流
格式化输入/输出
文件流
字符串流
01
02
04
05
03
目 录
CATALOUGUE
初心至善 匠心育人
输入/输出(I/O)对每个程序而言,都是非常重要的操作。C++语言并没有提供I/O语句,它是通过一组标准I/O函数和I/O流类库来实现I/O操作。C++的标准I/O函数继承自C语言,C++的I/O流类库不仅拥有标准I/O函数的功能,而且比标准I/O函数更安全、更具有可扩展性。本章主要针对I/O流类库进行详细讲解。
初心至善 匠心育人
4
在C++中,数据之间的传输操作称为流。它既可以表示数据从内存传输到某个载体或设备中,即输出流;也可以表示数据从某个载体或设备传输到内存中,即输入流,如图所示。
7.1 流的概念
在图中,向显示器输出字符与向磁盘文件写入字符,虽然通过流接受输出的设备不同,但具体操作流的过程是相同的。C++中所有流都是相同的,因此程序用流统一对各种输入与输出设备进行操作,使程序与各种设备无关,从而提高了程序设计的通用性和灵活性。
初心至善 匠心育人
5
在C++语言中,按照输入与输出对象的不同,可以将输入与输出流分为三类,如表所示。
7.1 流的概念
从表中可以得出,输入与输出数据的传递过程会形成不同的I/O流,C++语言将这些流定义成不同的类,再通过类来实例化出流对象,从而实现数据的输入与输出操作。C++按面向对象方法组织的多个流类及其类层次集合构成了输入/输出流类库,简称流库。
初心至善 匠心育人
6
7.2
输入/输出流类库
7.2.1
streambuf类
7.2.2
ios类
初心至善 匠心育人
7.2 输入/输出流类库
C++语言的输入/输出流类库有两个平行的基类,即streambuf类和ios类,所有的流类都是由它们派生出来,流类形成的层次结构就构成了流类库。
初心至善 匠心育人
7.2 输入/输出流类库
在对数据进行输入与输出操作时,为了节省计算机资源,常常需要使用缓冲区,所谓缓冲区,就是内存中数据的一个中转存放地。例如,某出版社要从北京往西安运送教材,如果有一千本教材,每次只运送一本教材,就需要运输一千次,为了减少运输次数,可以先把一批教材装在车厢中,这样就可以成批地运送教材,这时的车厢就相当于一个临时缓冲区。缓冲区通常比较大,这样在数据发出端和数据接收端之间附加的缓冲区就可以解决数据交换设备速度相差过大而造成的资源浪费问题。
在C++中,系统提供了一个缓冲区流类库,它是以streambuf为父类的类层次,主要负责缓冲区的处理。streambuf类的派生层次结构如图所示。
7.2.1 streambuf类
初心至善 匠心育人
9
7.2 输入/输出流类库
从上图中可以得出,streambuf类可以派生出filebuf类、strstreambuf类及stdiobuf类,它们都是属于流类库中的类。
streambuf类为所有的streambuf类层次对象设置了一个固定的内存缓冲区,该内存缓冲区由一个字符序列和两个指针(输入缓冲区指针和输出缓冲区指针)组成,这两个指针指向字符要被插入或被取出的位置。
由于streambuf类是一个抽象类,一般很少直接使用streambuf类。另外,由于streambuf类及它的派生类是专门用于管理缓冲区的类,考虑到数据隐藏和封装的需要,普通用户一般不涉及streambuf类及它的派生类,因此这里简单介绍streambuf类的3个派生类。
7.2.1 streambuf类
初心至善 匠心育人
10
7.2 输入/输出流类库
filebuf类在streambuf类的基础上增加了文件处理功能,它可以使用文件来保存缓冲区中的字符序列。当写文件时,把缓冲区中的字符序列输出到某个指定文件中;当读文件时,把某个指定文件中的字符序列输入到缓冲区。
strstreambuf类在streambuf类的基础上增加了动态内存管理功能,这使得它可以在内存和缓冲区之间进行数据操作。
stdiobuf类主要用于C++语言的流类层次方法和C语言的标准输入/输出函数混合使用时系统的缓冲区管理。
7.2.1 streambuf类
初心至善 匠心育人
11
7.2 输入/输出流类库
ios类中包含了一个指向streambuf对象的指针成员,它在streambuf类实现功能的基础上,增加了各种格式化的输入/输出控制方法。ios类作为流类库中的一个基类,
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。