《面向对象程序设计语言C-第8章流库.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计语言C-第8章流库.ppt(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象程序设计语言面向对象程序设计语言C+C+电子科技大学示范性软件学院电子科技大学示范性软件学院1第八章 流库8.1 C+的I/O系统C+为了与C兼容,仍然保留了printf和scanf进行输入输出的方法。在C+的输入输出中,编译系统对数据类型进行严格的检查,凡是类型不正确的数据都不可能通过编译,因此C+的I/O操作是类型安全的。但printf和scanf有一个重大的缺陷:就是它们不能处理用户自定义类型。所以,C+引入了自己的输入输出方式:流。C+采用继承的方法建立了比较实用的流库,流库不仅提供了与C的I/O系统相似的功能,而且功能更强灵活性更大,能方便进行扩充。2第八章 流库8.2 C+
2、流库的结构流库的结构输入输出流的含义输入输出流的含义输入是数据从输入设备(如键盘,磁盘,鼠标等)到内存的过程,输出是内存的数据输出到输出设备(如显示屏幕,打印机,磁盘等)的过程。输入输出过程中,数据像流水一样从一处流到另外一处,C+形象的描述该过程为流。流的内容可以是ASCII码字符、二进制形式的数据、图形图像、数字音频视频或者其他形式的信息。在C+中,输入输出流被定义为类。C+的I/O库中的类称为流类,用流类定义的对象称为流对象。比如cin是输入流对象,cout是输出流对象。3第八章 流库8.2 C+流库的结构流库的结构8.2.2 C+流库的结构流库的结构4iosiosistreamistr
3、eamostreamostreamistrstreamistrstreamifstreamifstreamostrstreamostrstreamofstreamofstreamiostreamiostreamistream_withassignistream_withassignostream_withassignostream_withassignfstreamfstreamstdiostreamstdiostreamstrstreamstrstreamstreambufstreambuffstreamfstreamstdiostreamstdiostreamstrstreamstrstr
4、eamiostream_initiostream_init第八章 流库8.3 输入和输出istream 流类将运算符“”重载为输入运算符,它相对于系统预定义类型(如 int,char,float,double等类型)重载。ostream 流类将运算符“”和“”和“”以满足自己的需要。5第八章 流库8.4 格式控制在很多情况下,对计算机的输入输出格式进行控制是非常有用的,C+提供了比较灵活的方式控制输入输出的格式。在 C+中,可以用 C 中的 printf 和 scanf 语句进行格式化I/O,这是 C 程序员比较熟悉的方法。除此以外,C+还提供了两种进行格式控制的方法,一种是使用ios类有关格
5、式控制的成员函数,另外一种是使用称为操纵符(manipulator)的特殊类型的函数,下面介绍这两种格式控制的方法。6第八章 流库8.4 格式控制8.4.1 用用ios类成员函数格式化类成员函数格式化7状态标志含义输入/输出kipws跳过输入中的空白Inputleft左对齐输出Outputright右对齐输出Outputinternal在符号位和基指示符后填入字符Outputdec转换基制为十进制Input/Outputoct转换基制为八进制Input/Outputhex转换基制为十六进制Input/Outputshowbase在输出中显示基指示符Input/Outputshowpoint输出
6、时显示小数点Outputuppercase十六进制输出时,表示制式的和表示数值的字符一律为大写Outputshowpos对正整数显示Outputscientific科学表示法显示浮点数Outputfixed定点形式显示浮点数Outputunitbuf在输出操作后立即刷新所有流Outputstdio在输出操作后刷新 stdout 和stderrOutput第八章 流库8.4 格式控制8.4.2 用操纵函数格式化用操纵函数格式化改变格式变量比较简单的方法是使用特殊的,但类似于函数的运算符,C+称之为操纵符。操纵符以一个流引用作为其参数,并返回同一流的引用,因此,它可嵌入到输入或输出操作的链中。例如
7、,操纵函数setw(int w)是将域宽设置为w。8第八章 流库8.4 格式控制8.4.2 用操纵函数格式化用操纵函数格式化下表示C+与定义的操纵符:9操纵符含义输入/输出dec设置十进制转换基格式标志 I/Ohex设置十六进制转换基格式标志I/Ooct设置八进制转换基格式标志I/Ows提取空白字符Iendl插入换行并刷新流Oends在串后插入终止空字符Oflush刷新流Osetbase(int n)置转换基格式为基 n(0,8,10 或 16)0表示使用缺省基数Oresetioflags(longf)清除由参数指定的 ins 或 outs 的格式位I/Osetioflags(long f)设
8、置由参数指定的 ins 或 outs 的格式位I/Osetfill(int c)设置填充字符为 c I/Osetprecision(int n)设置浮点精度为 n 位数字I/Osetw(int n)设置域宽为nI/O第八章 流库8.5 文件文件I/O8.5.1 文件的概念文件的概念文件指存储在外部介质上的数据集合。操作系统以文件为单位管理数据。如果想找外部介质的数据,先通过文件名找到指定文件,再从文件读数据。如果想将数据存储在外部介质中,也是先建立一个文件,然后才能输出数据。根据文件中的数据的组织形式,可以分为ASCII码文件和二进制文件。10第八章 流库8.5 文件文件I/O8.5.1 文件
9、的概念文件的概念写入到文件和从文件读出的过程可分解为三个抽象的概念:往流中加入一个字符;从流中取出一个字符;一旦建立一个流,把它与文件相关连以便用来读和写。因此,在 C+中,要进行文件I/O,首先必须创建一个流,然后将这个流与文件相关联(称为打开文件),这时才能进行读和写操作,使用完后,需关闭文件。11第八章 流库8.5 文件文件I/O8.5.2 文件的打开和关闭文件的打开和关闭C+有三种类型的文件流:输入文件流、输出文件流和输入/输出文件流。要打开一个输入文件流,必须说明类型为ifstream的对象;要打开一个输出文件流,必须说明一个类型为ofstream的对象;要建立输入和输出的流必须说明
10、一个类型为 fstream的对象。12第八章 流库8.5 文件文件I/O下面介绍open函数的函数原型。void open(const char *,int filemode,int=filebuf:openprot)第一个参数表示相关联的文件名,第二个参数表示文件的打开方式,第三个参数是文件的保护方式,与操作系统有关,用户一般只使用缺省值。13第八章 流库8.5 文件文件I/O文件的打开方式如下:14方式动作Ios:app追加数据 (总是写到文件尾)ios:ate在原打开文件上找到文件尾ios:in打开输入(对 ifstream 适用)ios:out打开输出(对 ofstream 适用)io
11、s:binary以二进制方式打开文件,缺省时为文本方式ios:trunc若文件存在则清除原内容(若指定 ios:out,但未指定ios:ate 或 ios:app,则这种方式为隐含的)ios:nocreate若文件不存在,则打开失败ios:noreplace 若文件存在,除非设置 ate 或 app,否则打开输出失败第八章 流库8.5 文件文件I/O8.5.3 文件的读写文件的读写文件读操作是从流中取一个元素,文件写操作是向流中写一个元素。ofstream类从ostream中继承了输出操作,而 ifstream 类从 istream 中继承了输入操作。当一个输入文件流、输出文件流或输入输出文件流建立后,对文件的读写就像控制台读写一样的方便。(例8-11)15