面向对象技术第九章_第1页
面向对象技术第九章_第2页
面向对象技术第九章_第3页
面向对象技术第九章_第4页
面向对象技术第九章_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象技术课件第九章1第一页,共二十页,编辑于2023年,星期五主要内容基本概念C++的流及流类库用户自定义类型的输入/输出文件的输入/输出应用举例2第二页,共二十页,编辑于2023年,星期五基本概念

流:与数据传送有关系的事物叫做流,C++用流表示数据的传输操作。流总是与某一设备(如:键盘、屏幕、硬盘、软盘等)相联系。

流类:C++为输入/输出定义了一组不同的类(包含要进行传送的数据的结构、属性、特征和行为,都将其放在流库中),叫做流类。

流的对象:用流类声明该流类的一个对象,代表某个输入设备或输出设备,并与具体的某个文件相联系,叫做流的对象。

输入流:有一种流表示数据从某个载体或设备传送到内存缓冲区变量中,叫做输入流。

输出流:有一种流表示数据从内存送到某个载体或设备中,叫做输出流。3第三页,共二十页,编辑于2023年,星期五7.2C++的流及流类库

C++流库(streamlibrary):用派生方法建立起来的一个输入输出类库,它有两个平行的基类:streambuf类和ios类,它们在iostream.h中定义,是两个非常低级的类,所有流类均以两者之一作为其基类。

一、streambuf类

streambuf类主要负责缓冲区的处理。缓冲区由一字符序列和两个指针(输入缓冲区指针和输出缓冲区指针)组成,这两个指针指向字符要被插入或被取出的位置。streambuf类可以派生出三个类:filebuf类、strstreambuf类和conbuf类。4第四页,共二十页,编辑于2023年,星期五它们的类等级如下:

streambuf

filebufstrstreambufconbuf二、ios类

ios类及其派生类提供用户使用流类的接口,提供了输入和输出所需要的公共操作,它支持对streambuf的缓冲区进行输入输出时的格式化或非格式化转换。ios类有四个直接派生类:istream(输入流)、ostream(输出流)、fstreambase(文件流)、strstreambase(串流)。5第五页,共二十页,编辑于2023年,星期五

iosistreamostreamfstreambasestrstreambase

以这四种基本的流类为基础,可派生出多种实用的流类:

iostream(输入/输出流)ifstream(输入文件流)ofstream(输出文件流)fstream(输入/输出文件流)

…在istream、ostream和iostream类的基础上分别重载运算符“=”,就得到了istream_withassign,ostream_withassign和iostream_withassign类。类等级如下:6第六页,共二十页,编辑于2023年,星期五

当开始执行C++程序时,C++会有几个自动打开的预定义流,它们是:

cin:与标准输入设备相关的流。cout:与标准输出设备相关的流。cerr和clog:与标准错误输出设备相关的流。

cerr和clog之间的区别是cerr没有被缓冲,clog被缓冲,只有当缓冲区满时,才进行输出。这四个预定义的流在iostream.h里被说明为withassign类的对象:

externistream_withassigncin;//等价于stdinexternostream_withassigncout;//等价于stdoutexternostream_withassigncerr;//等价于stderrexternostream_withassignclog;//等价于带缓冲的tderr可以用istream和ostream等类声明自己的流对象。7第七页,共二十页,编辑于2023年,星期五7.4用户自定义类型的输入/输出一、重载输出运算符“<<”输出运算符<<也称插入运算符,有两个操作数,左操作数为ostream类类型的对象,右操作数可以是一个预定义类型的变量,也可以是重载了该运算符(<<)的类的对象。重载运算符<<的定义格式如下:

ostream&operator<<(ostream&out,user_type&obj){out<<obj.item1;out<<obj.item2;out<<obj.item3;//…returnout;}一般采用友元函数形式重载。8第八页,共二十页,编辑于2023年,星期五书中例7.7(p258)定义了二维坐标类coord,并通过友元函数重载了输出运算符<<

friendostream&operator<<(ostream&stream,coord&ob);二、重载输入运算符“>>”定义格式如下:

istream&operator>>(istream&in,class_name&obj){in>>obj.item1;in>>obj.item2;in>>obj.item3;//…returnin;}一般采用友元函数形式重载。见例7.8(P260)9第九页,共二十页,编辑于2023年,星期五7.5文件的输入/输出概述

文件是具有相同类型的数据的任意序列,一般是指存放在外部介质上的数据的集合。要对文件进行处理,必须首先建立一个文件。根据文件数据的组织形式,可将文件分为ASCII文件和二进制文件。ASCII文件也称文本(text)文件。他们存放在介质上的存储形式和存储过程是不一样的。

对文件的操作有两种:一是向文件输出数据,另一是从文件读入数据到内存。写入到文件和从文件读出的过程可分解为三个抽象的概念:往流中加入一个字符;从流中取出一个字符;一旦建立一个流,把它与文件相关连以便用来读和写。10第十页,共二十页,编辑于2023年,星期五7.5.1文件打开与关闭

在C++中,打开一个文件,就是将这个文件与一个流建立关联;关闭一个文件,就是取消这种关联。C++有三种类型的文件流:输入文件流ifstream、输出文件流ofstream、输入/输出文件流fstream。类定义在fstream.h中。1、打开文件要将文件输入/输出,首先必须打开文件,分三个步骤:

(1)、在程序中要包含头文件fstream.h

(2)、建立流(定义流类的对象)ifstreamin;//输入流对象in,用于inputofstreamout;//输出流对象out,用于outputfstreamboth;//输入/输出流对象both,用于inputandoutput11第十一页,共二十页,编辑于2023年,星期五

(3)、使用open()函数(将建立的流与文件相关连)open()函数的原型为:

voidopen(constchar*filename,intmode,intaccess);其中filename用来传递文件名的,mode值决定文件的打开方式,其所能取的值是在iostream.h中ios类的公有部分定义的枚举值:

enumopen_mode{in=0x01out=0x02ate=0x04app=0x08trunc=0x10nocreate=0x20noreplace=0x40binary=0x80};每个枚举值的含义请见书中P262下半部分。第二个参数mode值有时也用缺省值。12第十二页,共二十页,编辑于2023年,星期五第三个参数值access是文件的保护方式,与操作系统有关,一般使用缺省值。打开文件的一般格式:

定义流类的对象;流类对象.open(“文件名”,使用方式,访问方式);或

定义流类的对象(“文件名”,使用方式,访问方式);例如:ofstreamout;out.open(“test”,ios::out,0);

如果未成功打开文件,则流变量的值为0,因此打开文件时,通常要判断打开是否成功。2、关闭文件当结束一个文件的操作后,要及时关闭该文件,以防止它被误用。ofstreamout(“test”);关闭文件的一般格式为:

流类对象.close();13第十三页,共二十页,编辑于2023年,星期五

7.5.2文件的读写1、文本文件的读写操作方法:用输入/输出运算符<<、>>。(例7.9)--P265(例7.10)--P265

14第十四页,共二十页,编辑于2023年,星期五2、二进制文件读写操作由于此时读写的数据都是无意义的二进制字符,这时不能用<<和>>运算符来读写。方法有:

(1)、使用put()和get()函数(例7.11)--P266

(2)、使用read()函数(例7.12)--P268和write()函数(例7.13)--P268

上面这4个函数也可以用于文本文件的读写15第十五页,共二十页,编辑于2023年,星期五3、检测文件结束可以使用eof()函数来检测文件是否到达文件尾的标志位EOF该函数的原型是inteof();示例:ifstreamifs;

…..if(!ifs.eof())//尚未到达文件尾

…..或者可以检查流对象是否为零,为零表示文件结束示例:

ifstreamifs;

…..if(!ifs)//尚未到达文件尾

…..

16第十六页,共二十页,编辑于2023年,星期五4、随机存取文件随机存取文件可以根据需要访问文件中的任一个元素。(1)、文件指针函数a)seekg(pos)——在输入流中从头开始移动pos个字节文件读指针

seekp(pos)——在输出流中从头开始移动pos个字节文件写指针b)seekg(pos,origin)seekp(pos,origin)

其中,origin取值:ios::beg、ios::cur、ios::end(2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论