面向对象程序设计及C++ 教学课件 ppt 作者 朱立华 朱建 俞琼 第7章_C++的流类

上传人:E**** 文档编号:89456876 上传时间:2019-05-25 格式:PPT 页数:61 大小:626KB
返回 下载 相关 举报
面向对象程序设计及C++ 教学课件 ppt 作者  朱立华 朱建 俞琼 第7章_C++的流类_第1页
第1页 / 共61页
面向对象程序设计及C++ 教学课件 ppt 作者  朱立华 朱建 俞琼 第7章_C++的流类_第2页
第2页 / 共61页
面向对象程序设计及C++ 教学课件 ppt 作者  朱立华 朱建 俞琼 第7章_C++的流类_第3页
第3页 / 共61页
面向对象程序设计及C++ 教学课件 ppt 作者  朱立华 朱建 俞琼 第7章_C++的流类_第4页
第4页 / 共61页
面向对象程序设计及C++ 教学课件 ppt 作者  朱立华 朱建 俞琼 第7章_C++的流类_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《面向对象程序设计及C++ 教学课件 ppt 作者 朱立华 朱建 俞琼 第7章_C++的流类》由会员分享,可在线阅读,更多相关《面向对象程序设计及C++ 教学课件 ppt 作者 朱立华 朱建 俞琼 第7章_C++的流类(61页珍藏版)》请在金锄头文库上搜索。

1、面向对象程序设计及C+,主讲:,第7章 C+的流类库与输入/输出控制,面向对象程序设计及C+,3,本章作业,作业本:P246249页:一,二,三, 五(3),4,本章内容提要,C+语言为输入/输出提供的流类 输入/输出格式控制方法 文本文件操作的方法和步骤 二进制文件操作的方法和步骤,5,本章内容安排,7.1 I/O流的概念及流类库 7.2 键盘输入与屏幕输出 7.3 文件的输入/输出 7.4 本章小结,结束本章,6,7.1 I/O流的概念及流类库,C+语言把数据之间的传输操作称作流。每个流都是一种与设备相联系的对象。 C+语言的流具有方向性,根据方向的不同有3种流: 与输入设备相联系的流称为

2、输入流,cin是标准输入流。 与输出设备相联系的流称为输出流,cout 是最常用的标准输出流。另外,输出流中还有cerr和clog这两种标准出错流。 与输入/输出设备相联系的流称为输入/输出流。,7,7.1 I/O流的概念及流类库,C+语言中数据的输入/输出(I/O)包括3个方面: 对标准输入设备键盘和标准输出设备显示器的输入/输出,简称为标准I/O。 对在外存磁盘上文件的输入/输出,简称为文件I/O。 对内存中指定的字符串存储空间的输入/输出,简称为串I/O。 C+语言中I/O操作的一般流程分为以下3步: (1)首先打开操作,使流和文件发生联系。 (2)建立正确联系后文件才允许数据流入或流出

3、。 (3)输入或输出结束后,使用关闭操作使文件与流断开联系。,8,7.1.1 streambuf类,streambuf类 用于提供物理设备的接口,它提供缓冲或处理流的通用方法,几乎不需要任何格式。 缓冲区由一字符序列和两个指针组成,这两个指针分别指向字符要被插入或被取出的位置。 streambuf类可以派生出3个类: filebuf类,用文件来保存缓冲区中的字符序列 strstreambuf类,在内存中进行提取和插入操作的缓冲区管理 conbuf类,控制光标、设置颜色、定义活动窗口、清屏、清1行等功能,9,7.1.2 ios类,ios类 为用户提供使用流类的接口,它们均有一个指向streamb

4、uf的指针 它使用streambuf完成检查错误的格式化输入/输出,并支持对streambuf的缓冲区进行输入/输出时的格式化或非格式化转换。 ios作为流库中的一个基类,可以派生出流库中许多的类。 ios类有4个直接派生类: 输入流(istream) 输出流(ostream) 文件流(fstreambase) 串流(strstreambase,10,7.1.2 ios类,以istream、ostream、fstreambase、strstreambase为基础,组合出多种实用的流: 输入/输出流(iostream) 输入/输出文件流(fstream) 输入/输出串流(strstream) 屏

5、幕输出流(constream) 输入文件流(ifstream) 输出文件流(ofstream) 输入串流(istrstream) 输出串流(ostrstream)等,返回,11,7.2.1 一般的输入/输出,C+语言中使数据流动的方法 : 使用在标准输入输出头文件stdio.h中声明的库函数 使用在输入输出流类文件iostream.h中定义的流对象cin和cout 使用插入运算符“” cin 变量名;,12,7.2.1 一般的输入/输出,输入/输出类的定义 istream和ostream提供了流库的主要输入/输出 是研究流库的关键 istream类 istream类重载了get函数。 例如:i

6、stream & istream:get( signed char *,int len,char=n); 从流中将字符输入到给定的char *,直到遇到分界符、文件结尾或已读完(len-1)个字节为止。,13,7.2.1 一般的输入/输出,istream类 getline istream 表示将字符输出到流中。,14,7.2.1 一般的输入/输出,输入输出运算符的使用 【例7.1】输出运算符“ using namespace std; void main() int k=20; double x=77.83,y=1534.65; char * str=“Hello!“; cout “k*10+

7、2=“ k*10+2 “ int const=“ 100 endl; cout “x=“ x “ y=“ y endl; cout “str=“ str endl; ,程序的运行结果为: k*10+2=202 int const=100 x=77.83 y=1534.65 str=Hello!,15,7.2.1 一般的输入/输出,输入运算符“”的使用 流输入的操作是通过运算符“”来完成的,有两个操作数,左面的操作数是istream类的对象,右面的操作数是系统预定义的任何数据类型的变量。例如: int i; cin i; cout ”要求输入一个整数赋给i,若输入时输入了实数,则先类型转换,将实

8、数转换成整数(取整)后再赋给变量i,而转换工作是系统自动完成的。,16,7.2.1 一般的输入/输出,输入时要注意的问题 (1)用cin从键盘输入多个数据时,需要用空格或换行将数值隔开,而不能用其它分隔符号(如逗号) (2)类型的匹配问题。不同类型的变量一起输入时,系统除检查是否有空白,还要检查输入数据与变量的匹配问题 (3)用cin输入字符串时,字符串中不能有空格,一旦遇到空格,就认为是本串的结束。因此输入带空格的字符串,可以考虑用cin.get()或 cin.getline()。,17,7.2.1 一般的输入/输出,【例7.2】cin和cin.get在输入时的区别。 #include us

9、ing namespace std; const int SIZE =80; void main( ) char buffer1SIZE, buffer2SIZE; cout buffer1; cout “The string read with cin was :“ buffer1 endl; cin.get(buffer2,SIZE); cout “The string read with cin.get was: “ buffer2 endl; ,程序运行结果为: Enter a sentence: Test reading functions with cin and cin.get

10、/此行为用户从键盘输入 The string read with cin was :Test The string read with cin.get was: reading functions with cin and cin.get,18,7.2.2 格式化的输入/输出,C+语言提供了两种进行格式控制的方法: 使用ios类中的有关格式控制的成员函数 使用操纵函数控制格式 用户也可以自定义控制符函数,19,7.2.2 格式化的输入/输出,用ios类成员函数进行格式化 (1)格式控制状态标志 输入/输出的格式由各种状态标志来确定,这些状态标志在状态量中多占一位,它们在ios类中定义为枚举量,

11、20,7.2.2 格式化的输入/输出,(2)用成员函数对状态标志进行操作 在ios类中有3个成员函数可以对状态标志进行操作。ios类中定义一个long型的长整数的数据成员来记录当前格式化的状态,即各标志位设置值,这个数据成员被称为标志字。例如,若在状态标志中设定了skipws和dec,其他均未设定,则值为0000000000010001,即为十六进制的0x0011,十进制的17。这些状态值之间是或的关系,可以并存。,21,7.2.2 格式化的输入/输出,【例7.4】用setf( ) 函数设置状态标志示例。 #include using namespace std; void main() co

12、ut.setf(ios:showpos); /正数前面输出+ cout.setf(ios:scientific); /用科学计数法输出实数 cout 123 “ “ 123.23 “n“ ; 程序运行结果为: +123 +1.232300e+002,22,7.2.2 格式化的输入/输出,ios类除提供了能操作状态标志的成员函数外,还提供了能设置域宽、填充字符和设置精度的成员函数。 设置域宽 设置域宽函数有两种形式,即: int ios:width(int len) ; /设置域宽,并返回原来的域宽 int ios:width( ) ; /返回当前域宽,缺省时域宽为0,23,7.2.2 格式化的

13、输入/输出,填充字符,其作用是当输出值不满域宽时用填充字符来填充,缺省情况下填充字符为空格。所以在使用时,它与width()函数相配合,否则没有意义: char ios:fill(char ch) ; /重新设置填充字符,并返回设置前的填充字符 char ios:fill( ) ; /返回当前的填充字符,24,7.2.2 格式化的输入/输出,设置精度: 两个函数对浮点数输出显示精度进行操作,它们是: int ios:precision(int p) ; /重新设置显示精度,并返回设置前的显示精度 int ios:precision( ) ; /返回当前的显示精度,25,7.2.2 格式化的输入

14、/输出,用操纵函数进行格式化控制 操纵符函数仅仅改变流的状态标志。 C+语言提供了标准的操纵符函数,也提供了用户建立自己的操纵符函数的方法,后者对 用户控制一些特殊的输出设备提供了有效的表达方法。 C+语言提供的标准(或称预定义)的操纵符,26,7.2.2 格式化的输入/输出,【例7.7】用操纵函数setw设置域宽示例。 #include #include using namespace std; void main() int i=6789; int j=1234; int k=10; cout setw(6) i j k “n“; cout setw(6) i setw(6) j setw

15、(6) k; ,程序的运行结果为: 6789123410 6789 1234 10,27,7.2.2 格式化的输入/输出,C+语言除了提供标准的操纵符和控制符函数外,还允许用户建立自己的控制符函数方法。 (1)输出控制符函数的建立,定义形式: ostream 其中:manip_name是控制符函数的名字,返回值是ostream流类的引用,stream是ostream流类的引用参数,为用户自定义标识符。,28,7.2.2 格式化的输入/输出,/li7_9.cpp: 自定义输出控制符函数setup并调用 #include #include using namespace std; ostream

16、,程序的运行结果是: 10 10$,29,7.2.2 格式化的输入/输出,(2)输入控制符函数的建立,定义形式与输入控制符函数类似: istream 其中:manip_name是控制符函数的名字,返回值是istream流类的引用,stream是istream流类的引用参数,为用户自定义标识符。,30,7.2.2 格式化的输入/输出,/li7_10.cpp:自定义输入控制符函数prompt并调用 #include #include using namespace std; istream ,程序执行结果如下: Enter number using hex format:ff / ff为用户从键盘输入 255,31,7.2.3 用户自定义类型的输入/输出,用户自定义的数据类型的输入/输出也可以像系统标准类型的输入/输出那样直接方便,这在C+语言中采用重载输入流运算符“ ”和输出流运算

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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