ImageVerifierCode 换一换
格式:PPT , 页数:42 ,大小:380.50KB ,
资源ID:10069254      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10069254.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第7章_C++的流类5-22.ppt)为本站会员(hwpkd79526)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第7章_C++的流类5-22.ppt

1、面向对象程序设计及C+,主讲:,第7章 C+的流类库与输入/输出控制,面向对象程序设计及C+,3,本章内容提要,C+语言为输入/输出提供的流类 输入/输出格式控制方法 文本文件操作的方法和步骤 二进制文件操作的方法和步骤,4,以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件。除了以终端为对象进行输入和输出外,还经常用磁盘(光盘)作为输入输出对象,磁盘文件既可以作为输入文件,也可以作为输出文件。 程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。C+的

2、输入与输出包括以下3方面的内容:,输入输出的含义,5,(1) 对系统指定的标准设备的输入和输出。简称标准I/O。 (2) 以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文件的输入输出,简称文件I/O。 (3) 对内存中指定的空间进行输入和输出。通常指定一个字符数组作为存储空间(实际上可以利用该空间存储任何信息)。这种输入和输出称为字符串输入输出,简称串I/O。 C+采取不同的方法来实现以上3种输入输出。 为了实现数据的有效流动,C+系统提供了庞大的I/O类库,调用不同的类去实现不同的功能。,6,在C语言中,用printf和scanf

3、进行输入输出,往往不能保证所输入输出的数据是可靠的、安全的。 在C+的输入输出中,编译系统对数据类型进行严格的检查,凡是类型不正确的数据都不可能通过编译。因此C+的I/O操作是类型安全(type safe)的。 C+的I/O操作是可扩展的,不仅可以用来输入输出标准类型的数据,也可以用于用户自定义类型的数据。C+对标准类型的数据和对用户声明类型数据的输入输出,采用同样的方法处理。 C+通过I/O类库来实现丰富的I/O功能。C+的输入输出优于C语言中的printf和scanf,但是比较复杂,要掌握许多细节。,C+的I/O对C的发展类型安全和扩展性,7,C+的输入输出流,C+的输入输出流是指由若干字

4、节组成的字节序列,这些字节中的数据按顺序从一个对象传送到另一对象。流表示了信息从源到目的端的流动。在输入操作时,字节流从输入设备(如键盘、磁盘)流向内存,在输出操作时,字节流从内存流向输出设备(如屏幕、打印机、磁盘等)。流中的内容可以是ASCII字符、二进制形式的数据、图形图像、数字音频视频或其他形式的信息。 实际上,在内存中为每一个数据流开辟一个内存缓冲区,用来存放流中的数据。流是与内存缓冲区相对应的,或者说,缓冲区中的数据就是流。,8,在C+中,输入输出流被定义为类。C+的I/O库中的类称为流类(stream class)。用流类定义的对象称为流对象。 cout和cin并不是C+语言中提供

5、的语句,它们是iostream类的对象,在未学习类和对象时,在不致引起误解的前提下,为叙述方便,把它们称为cout语句和cin语句。 在学习了类和对象后,我们对C+的输入输出应当有更深刻的认识。,9,1. iostream类库中有关的类,C+编译系统提供了用于输入输出的iostream类库。iostream这个单词是由3个部分组成的,即i-o-stream,意为输入输出流。在iostream类库中包含许多用于输入输出的类。ios是抽象基类,由它派生出istream类和ostream类,两个类名中第1个字母i和o分别代表输入(input)和输出(output)。istream类支持输入操作,os

6、tream类支持输出操作,iostream类支持输入输出操作。 iostream类是从istream类和ostream类通过多重继承而派生的类。其继承层次见图示。,10,11,12,2. 与iostream类库有关的头文件,iostream类库中不同的类的声明被放在不同的头文件中,用户在自己的程序中用#include命令包含了有关的头文件就相当于在本程序中声明了所需要用到的类。可以换一种说法: 头文件是程序与类库的接口,iostream类库的接口分别由不同的头文件来实现。常用的有 iostream包含了对输入输出流进行操作所需的基本信息。 fstream用于用户管理的文件的I/O操作。 str

7、stream用于字符串流I/O。 stdiostream用于混合使用C和C+的I/O机制时。 iomanip在使用格式化I/O时应包含此头文件。,13,3. 在iostream头文件中定义的流对象,iostream.h包含了对输入输出流进行操作所需的基本信息。因此大多数C+程序都包括iostream.h。在iostream.h头文件中不仅定义了有关的类,还定义了4种流对象:例如 cin是istream的派生类istream_withassign的对象,它是从标准输入设备(键盘)输入到内存的数据流,称为cin流或标准输入流。cout是ostream的派生类ostream_withassign的对

8、象,它是从内存输入到标准输出设备(显示器) 的数据流,称为cout流或标准输出流。,14,7.2.1 一般的输入/输出,C+语言中使数据流动的方法 : 使用在标准输入输出头文件stdio.h中声明的库函数 使用在输入输出流类文件iostream.h中定义的流对象cin和cout 使用插入运算符“” cin 变量名;,15,7.2.1 一般的输入/输出,输入运算符“”的使用 流输入的操作是通过运算符“”来完成的,有两个操作数,左面的操作数是istream类的对象,右面的操作数是系统预定义的任何数据类型的变量。例如:int i;cin i;cout ”要求输入一个整数赋给i,若输入时输入了实数,则

9、先类型转换,将实数转换成整数(取整)后再赋给变量i,而转换工作是系统自动完成的。,16,7.2.1 一般的输入/输出,输入时要注意的问题 (1)用cin从键盘输入多个数据时,需要用空格或换行将数值隔开,而不能用其它分隔符号(如逗号) (2)类型的匹配问题。不同类型的变量一起输入时,系统除检查是否有空白,还要检查输入数据与变量的匹配问题 (3)用cin输入字符串时,字符串中不能有空格,一旦遇到空格,就认为是本串的结束。因此输入带空格的字符串,可以考虑用cin.get()或 cin.getline()。,17,7.2.2 格式化的输入/输出,C+语言提供了两种进行格式控制的方法: 使用ios类中的

10、有关格式控制的成员函数7.4-7.6(自学) 使用操纵函数控制格式7.7(自学) 用户也可以自定义控制符函数(自学),18,7.2.3 用户自定义类型的输入/输出,用户自定义的数据类型的输入/输出也可以像系统标准类型的输入/输出那样直接方便,这在C+语言中采用重载输入流运算符“ ”和输出流运算符“ ”和输出流运算符“”的内容,在第五章的5.3.4节中已经详细讲解.,19,7.3 文件的输入/输出,C+语言把文件看作是字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。 根据数据的组织形式,可以分为ASCII文件和二进制文件两种 ASCII文件也称文本(text)文件,它的每个字节存放一

11、个ASCII代码,代表一个字符 二进制文件则是把内存中的数据,按其在内存中的存储形式原样输出到磁盘上存放。,20,7.3 文件的输入/输出,在使用的文件时需要开辟一个缓冲区。从内存向磁盘文件输出数据时,必须先送到内存中的缓冲区,装满缓冲区后,一起送到磁盘上。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地把数据送到程序数据区(或赋给程序变量)。,21,7.3 文件的输入/输出,C+语言中进行文件操作的一般步骤: 为要进行操作的文件定义一个流。 建立(或打开)文件。如果文件不存在,则建立该文件;如果磁盘上已存在该文件,则打开它。 进行读/写

12、操作。在建立(或打开)的文件上执行所要求的输入/输出操作。一般来说,在主存与外设的数据传输中,由主存到外设叫做输出或写,而由外设到主存叫做输入或读。 关闭文件。当不需要进行其他输入输出操作时,应把已打开的文件关闭。,22,7.3.1 文件的打开与关闭,打开文件在C+语言中,打开一个文件,就是将这个文件与一个流建立连接。 关闭一个文件,就是取消文件与流的这种连接。 要执行文件输入/输出,需要做以下几件事 (1)在程序中要包含头文件fstream.h或名字空间std的文件fstream。,23,7.3.1 文件的打开与关闭,(2)建立流。建立流的过程就是定义流类的对象,例如:ifstream in

13、;ofstream out;fstream io; (3)使用open()函数打开文件,也就是使某一文件与上面的某一流相联系。 (4)进行文件的读/写操作。 (5)使用close()函数将打开的文件关闭,切断流与文件之间的联系。,24,7.3.1 文件的打开与关闭,void open(char *filename, int mod, int access); 第1个参数filename用来传递文件名,其实在参数是需要访问的文件名(可以是字符串常量或字符数组变量、字符指针) 对于ifstream流,mod的缺省值为ios:in;对于ofstream流,mod的缺省值为ios:out。 因此,打开

14、文件的一般格式如下: 流类对象open(文件名,使用方式,访问方式);,25,7.3.1 文件的打开与关闭,void open(char *filename, int mod, int access); 第2个参数mod用来表示文件的使用方式,不同的使用方式决定了可以对文件执行不同的操作,与mod对应的实在参数必须取下面值中的某一个: ios:app /表示使输出追加到文件尾部 ios:ate /表示寻找文件尾 ios:in /表示文件可以输入 ios:nocreate /表示若文件不存在,则open()函数失败 ios:noreplace /表示若文件存在,则open()失败 ios:out

15、 /表示文件可以输出 ios:trunc /使同名文件被删除 ios:binary /表示文件以二进制方式打开,缺省时为文本文件,26,7.3.1 文件的打开与关闭,void open(char *filename, int mod, int access); 第3个参数access值决定文件怎样存取,是文件访问方式,对应的实在参数可以取下面值中的某一个: 0 普通文件 1 只读文件 2 隐藏文件 4 系统文件 8 备份文件,27,7.3.1 文件的打开与关闭,实际上,由于文件使用方式和访问方式均有缺省值,因此可以简化打开文件的操作 类ifstream、ofstream以及fstream都有自

16、动打开文件的构造函数,这些构造函数的参数及缺省值与函数open的完全相同。 因此,实际编程时打开一个文件的最常见的形式为: 文件流类名 流对象名(文件名);,28,7.3.1 文件的打开与关闭,关闭文件 当结束一个文件的操作后,要及时将该文件关闭,以防止它再被误用。 关闭文件使用流类的成员函数close来实现。 其一般格式为:流类对象close();例如: mystreamclose();,29,7.3.2 文件的读写,文件在打开之后、关闭之前必定要做一些读写操作。 C+语言提供一些函数实现文件的这些操作。例239页7.12-14使用运算符“”与“” 使用函数get()与put() 使用函数r

17、ead()与write() 随机文件的读写操作 (自学),30,举例1,有一个整型数组,含10个元素,从键盘输入10个整数给数组,将此数组送到磁盘文件中存放。 #include using namespace std; int main( ) int a10;ofstream outfile(f1.dat,ios:out);/定义文件流对象,打开磁盘文件f1.datif(!outfile) /如果打开失败,outfile返回0值cerrai;outfileai ; /向磁盘文件f1.dat输出数据outfile.close(); /关闭磁盘文件f1.datreturn 0; ,31,运行情况如

18、下: enter 10 integer numbers: 1 3 5 2 4 6 10 8 7 9 请注意: 在向磁盘文件输出一个数据后,要输出一个(或几个)空格或换行符,以作为数据间的分隔,否则以后从磁盘文件读数据时,10个整数的数字连成一片无法区分。,32,举例2,建立的数据文件f1.dat中读入10个整数放在数组中,找出并输出10个数中的最大者和它在数组中的序号。 #include int main( ) int a10,max,i,order;ifstream infile(f1.dat,ios:in|ios:nocreate); /定义输入文件流对象,以输入方式打开磁盘文件f1.da

19、tif(!infile)cerrai;/从磁盘文件读入10个整数,顺序存放在a数组中coutai ; /在显示器上顺序显示10个数coutendl;max=a0;,33,order=0;for(i=1;imax) max=ai; /将当前最大值放在max中 order=i; /将当前最大值的元素序号放在order中coutmax=maxendlorder=orderendl;infile.close();return 0; 运行情况如下: 1 3 5 2 4 6 10 8 7 9(在磁盘文件中存放的10个数) max=10 (最大值为10) order=6 (最大值是数组中序号为6的元素),3

20、4,举例3:,将一批数据以二进制形式存放在磁盘文件中。 #include using namespace std; struct student char name20; int num;int age;char sex; ; int main( ) student stud3=Li,1001,18,f,Fun,1002,19,m,Wang,1004,17,f; ofstream outfile(stud.dat,ios:binary);if(!outfile)cerropen error!endl;abort( );/退出程序,35,for(int i=0;i3;i+)outfile.wri

21、te(char*) 执行一次write函数即输出了结构体数组的全部数据。 可以看到,用这种方法一次可以输出一批数据,效率较高。在输出的数据之间不必加入空格,在一次输出之后也不必加回车换行符。在以后从该文件读入数据时不是靠空格作为数据的间隔,而是用字节数来控制。,36,C+语言的I/O流库有:streambuf和ios,ios类有4个直接派生类 C+语言提供使用ios类中的有关格式控制的成员函数;使用操纵函数控制格式。 用户可以使用运算符“”和“”和“”和 “”直接对文件进行读写操作,也可用get()与put()函数或read()与write()函数进行文件的读写操作。 文件不仅可以顺序访问,还

22、可以随机读写,7.4 本章小结,37,7.4 本章小结,进行文件操作一般经过以下4个步骤。 为要进行操作的文件定义一个流。 建立(或打开)文件。如果文件不存在,则建立该文件;如果磁盘上已存在该文件,则打开它。 进行读写操作。在建立(或打开)的文件上执行所要求的输入或输出操作。一般来说,在主存与外设的数据传输中,由主存到外设叫做输出或写,而由外设到主存叫做输入或读。 关闭文件。,返回,38,课堂练习,1、P251一(11)、(2)、(4) 2、编程:从键盘读入一行字符,把其中的字母字符依次存放在磁盘文件f2.dat中。再把它从磁盘文件读入程序,将其中的小写字母改为大写字母,再存入磁盘文件f3.d

23、at。,39,#include using namespace std; / save_to_file函数从键盘读入一行字符,并将其中的字母存入磁盘文件 void save_to_file( ) ofstream outfile(f2.dat); /定义输出文件流对象outfile,以输出方式打开磁盘文件f2.dat if(!outfile)cerr=65 /将字母字符存入磁盘文件f2.dat,40,coutci; /同时送显示器显示coutendl;outfile.close(); /关闭f2.dat /从磁盘文件f2.dat读入字母字符,将其中的小写字母改为大写字母,再存入f3.dat v

24、oid get_from_file() char ch;ifstream infile(f2.dat,ios:in|ios:nocreate); /定义输入文件流outfile,以输入方式打开磁盘文件f2.datif(!infile)cerropen f2.dat error!endl;exit(1); ofstream outfile(f3.dat);/定义输出文件流outfile,以输出方式打开磁盘文件f3.dat if(!outfile)cerropen f3.dat error!endl;exit(1);,41,while(infile.get(ch)/当读取字符成功时执行下面的复合语句if(ch=97 运行情况如下:,42,运行情况如下: New Beijing, Great Olypic, 2008, China. NewBeijingGreatOlypicChina(将字母写入磁盘文件f2.dat,同时在屏幕显示) NEWBEIJINGGREATOLYPICCHINA (改为大写字母),

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报