第23章 C++的输入输出 类库

上传人:f****u 文档编号:115066875 上传时间:2019-11-12 格式:PPT 页数:89 大小:290KB
返回 下载 相关 举报
第23章 C++的输入输出 类库_第1页
第1页 / 共89页
第23章 C++的输入输出 类库_第2页
第2页 / 共89页
第23章 C++的输入输出 类库_第3页
第3页 / 共89页
第23章 C++的输入输出 类库_第4页
第4页 / 共89页
第23章 C++的输入输出 类库_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《第23章 C++的输入输出 类库》由会员分享,可在线阅读,更多相关《第23章 C++的输入输出 类库(89页珍藏版)》请在金锄头文库上搜索。

1、1,C+ 语言本身没有输入输出函数。C语言中是 通过FILE描述的结构进行I/O处理, C+的I/O类库 平行于这个FILE结构建立一套面向对象的输入输出 方式。FILE结构的实例称为流文件, I/O类的实例称 为流对象。 流对象提供两个特点:一个是数据类型安全的 自动匹配,另一个是可以对集合类型数据进行输入 输出重载。,第23章 C+的输入输出类库,2,一、iotream类层次概述 二、关于C+的新类 三、流对象的输入输出重载函数 四、重载流插入运算符和流提取运算符,3,一、iotream类层次概述 ios类是iotream类的顶层基类,iostream本身直 接具有两个基类,因此构成一个多

2、继承的层次结构。 下面是iotream类的继承树层次。,4,图 iotream类继承层次图,5,iotream类继承树上的名称和含义简单地解释如下: ios 流基类 iostream.h istream 输入流基类 ifstream 输入文件流类 istream_withassign cin对象的输入流类 istrstream 输入字符串流类 ostream 输出流基类 ofstream 输出文件流类 ostream_withassign cout,cerr和clog对象的输出流类 iostream 输入输出流基类 fstream 输入输出文件流类,6,stdiostream 标准文件的I/O

3、流类 strstream 输入输出字符串流类 在这个继承树层次之外尚存在一个streambuf类,负责 内存和磁盘文件之间数据的缓冲。 深入细致的编程需要和这个类打交道,本书鉴于篇幅提 供的算例未涉及该类。,7,二、关于C+的新类 C+ 新引进一个namespace名称空间的概念, 原因之 一旨在减少程序趋大时名称相同导致的混乱,原因之二是扬 弃设计不佳的旧类。扬弃意味发扬固有的长处,抛弃潜在的 错误。 这样I/O类库存在两个略微不同的版本: 一个是旧的版 本, 这个版本不采用std前导名称分辨符; 一个是新的版 本, 新的版本相当于将旧的版本扬弃之后平移到std名称空 间。 本课件鉴于旧版本

4、的描述相对简洁,因此采用旧版本的 描述说明流类库的使用方法。,8,通过下面两个步骤,可以将旧版本的描述代码转换为新 版本的程序: 1. 将包含文件指令: #include 转换为: #include 新的版本无需文件扩展名.h。 2. 在程序中采用using语句,表明新版本的类在一个独 立的std命名的名称空间中,即将类和对象的名称从std空间 导出: using namespace std;,9,进行上面两个改动之后,就可以与老版本相同的格式使 用新版本的类。 换言之本章的示例和语法可以延拓到新的类。但新的类 提供更多的格式标识符和I/O操作算子。 也可以采用标准名称空间分辨符 std:直接

5、操作std名称 空间的对象和相关的成员函数: std:coutLexpre;,10,三、流对象的输入输出重载函数 cout定义为ostream_withassign类的全局对象,这个 类派生于ostream类,下面是cout全局对象在vc6.0中的定 义的格式: 1. 在ostream.h头文件中予以说明: extern ostream_withassign cout; 2. 仅在另一个实现文件如iostrini.cpp中初始化一次: ostream_withassign cout(_new_crt filebuf(1); 这样有效防止全局变量重复定义。 类似地cin定义为istream_wi

6、thassign类的全局对象, 这个类派生于istream类。,11,左移运算符关于ostream类进行了重载,这些 operator运算符在流的角度称为插入运算符函数,将圆括 号中的实参信息插入到ostream类的数据结构中,即插入信 息到ostream流对象中,例如流对象cout中。 在vc6.0 ostream.h中ostream类的左移运算符函数存 在如下函数原型声明: ostream,12,ostream,13,右移运算符关于istream类进行了重载,istream类的 对象代表数据源。这些operator运算符称为提取运算符函 数。在流对象如 cin 中提取数据,输送到圆括号中的

7、引用形 参指向的实参变量。 scanf函数采用的是指针语法,输入流 对象cin采用的是引用语法。 下面是一些vc6.0 istream.h中istream类右移运算符 operator 函数: istream,14,上面的函数原型都返回对象的引用,这样的运算符函数 能够参加连续的运算。例如: coutabc; 如果 x 表示只读字符指针,则 coutx启动ostream& operator(const char *)函数。 如果y表示long型数据, 启动ostream& operator(long)函数,如此等等。,15,如果a表示double型变量,启动istream 输出相同的结果: a

8、b0x00426e04。,16,一般地对于char* p=“ab”; coutp显示指针p指向的字 符串,如果要显示指针p的值可采用格式 cout(void*)p 以 启动operator(const void*)成员函数,该函数以只读方式 显示指针的值。 类型转换(void*)p不能写为void*(p)。 cout(x+=e)不 能写为coutx+=e, 因为coutx+=e理解为(coutx)+=e 但ostream类中没有operator+=运算符函数。,17,四、重载流插入运算符和流提取运算符 上面 operator函数的右操作数仅 允许是算术类型或指针类型,如果期望右操作数是结构或联

9、 合变量或对象obj,需定义相关的operator 运算符函数,以支持类似于coutobj的运算。 由于ostream和istream类或其派生类的对象在运算符 的左,边相关的提取和插入运算符函数只能是全局函数,其 原型分别为: ostream,18,这两个重载函数第一个入口参数是流对象的引用,返回 的也就是这个对象引用,第二个参数是用户建立的类,用 CType表示。第二个参数优先采用引用形参。如果这个 CType类存在私有成员需要访问,则将上面两个声明平移到 类中,声明为friend函数: class CType friend ostream ,19,istream ,20,Ostream

10、,21,C+ 语言本身没有输入输出函数。C语言中是 通过FILE描述的结构进行I/O处理, C+的I/O类库 平行于这个FILE结构建立一套面向对象的输入输出 方式。FILE结构的实例称为流文件, I/O类的实例称 为流对象。 流对象提供两个特点:一个是数据类型安全的 自动匹配,另一个是可以对集合类型数据进行输入 输出重载。,第23章 C+的输入输出类库,22,五、格式化的输入输出,23,五、格式化的输入输出 流对象有两种平行的方法用于格式控制: 一、是利用成员函数; 二、是采用操作算子。,24,1. 操作算子(manipulator)的概念 I/O流类库的格式化输入输出是通过成员函数和一些I

11、/O 操作算子(manipulator)进行的。操作算子通常是返回确定 数据类型的函数名,密切地与影响数据流的预先定义的对象 相联系。这些操作算子作为特定类型的表达式,可以作为右 操作数出现在operator指令 予以支持。,25,2. 整数转换的操作算子hex,oct,dec 下面是进行I/O整数转换的操作算子 (manipulator) 的名 称和含义: dec 以有符号整数十进制格式(缺省模式)解释后 续域。可以进行读写操作。 hex 以无符号整数十六进制格式解释后续域。 可以进行读写操作。 oct 以无符号整数八进制格式解释后续域。 可以进行读写操作。,26,操作算子的dec ,hex

12、,oct 的全局函数原型分别为: ios 这些格式转换的作用具有持续性,如果用hex设置16进 制数的输出到cout。,27,例 操作算子的 hex, oct, dec 的用法 # include signed short a=65535; unsigned short b=-1; void main() coutdeca,dec(unsignedshort)a , hexa,octa;; coutdec(signedshort)b,decb, hexb,octbendl; 比较: printf (“%hd,%4hu,%4ho,%xn“,b,b,b,b);,28,3. 自定义操作算子 为方便o

13、stream输出操作,系统提供三个与类ostream 相关的操作算子endl, ends, flush。它们的名称、含义和原 型或定义如下: endl 插入一个新行n。 ostream ,29,一个与类istream相关的操作算子为ws,进行istream 输入操作。它的原型和含义如下: istream ,30,运算符函数调用coutendl启动上面这个成员函数,全 局函数endl的定义如下: inline ostream ,31,例 ostream类操作算子的用法 # include inline ostream 输出: 1 2 3 1+2+3+ 1SSSS2SSSS3SSSS,32,4.

14、格式化标志值 在基类ios中通过enum引进一组称为格式化标志的立即 数,供 resetiosflags,setiosflags 操作算子以及成员函数 ios:setf (long)和ios:unsetf (long)作为入口值。这些梅举 常数设置成适用于参入位的运算,位运算的结果作为标志, 控制下一个回合的格式转换。,33,下面是关于这些梅举立即数的名称和含义说明: ios:skipws 在输入中跳过空白 ios:left 左对齐值,用填充字符填充右边 ios:right 右对齐值,用填充字符(缺省为空格字符) 填充左边(缺省对齐方式) ios:internal 在符号和数据之间增加填充字符

15、 ios:dec 以十进制格式化数值(缺省进制) ios:oct 以八进制格式化数值 ios:hex 以十六进制格式化数值 ios:showbase 以C+编译器能读的格式显示数值常量 ios:showpoint 对浮点数值显示小数点和尾部的0,34,ios:uppercase 十六进制数显示大写字母A到F,对于科 学格式显示大写字母E ios:showpos 对于正数显示正号(+) ios:scientific 以科学格式显示浮点数值 ios:fixed 以定点格式显示浮点数值,即显示小数 点,后边的位数由精度指定。 ios:unitbuf 在每次插入之后刷新流缓冲的单元 ios:stdio 在每次插入后刷新该流的stdout和stderr,35,在ios类中定义如下const型的公共静态成员数据: static const long basefield; static const long adjustfield; static const long floatfield; 静态成员变量

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号