第11章 C++的输入输出流

上传人:我*** 文档编号:137620462 上传时间:2020-07-10 格式:PPT 页数:52 大小:103.50KB
返回 下载 相关 举报
第11章 C++的输入输出流_第1页
第1页 / 共52页
第11章 C++的输入输出流_第2页
第2页 / 共52页
第11章 C++的输入输出流_第3页
第3页 / 共52页
第11章 C++的输入输出流_第4页
第4页 / 共52页
第11章 C++的输入输出流_第5页
第5页 / 共52页
点击查看更多>>
资源描述

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

1、C+面向对象程序设计教学内容,第1章 C+概述 第2章 类和对象 第3章 面向对象程序设计概述 第4章 进一步学习类和对象 第5章 堆与复制构造函数 第6章 继承性:派生类 第7章 运算符重载 第8章 虚函数和多态性 第9章 模板 第10章 类库和C+的标准模板库STL 第11章 输入输出流 第12章 异常处理,第11章 C+的输入输出系统: I/O流库,11.1 C+的输入输出流(I/O Streams) 11.2 重载输入输出运算符 11.3 输入输出格式控制 11.4 文件的输入输出操作,11.1 C+的输入输出流,I/O流的概念 输出流 输入流 输入/输出流,为什么要有C+流类库,C语

2、言的输入输出系统不支持拥护自定义的对象或数据类型,如一定义: struct sample int i ; float f; char *ch; s1; 不能用输出函数来输出以上结构变量: printf(“%sample”,s1);,为什么要有C+流类库,C+中,用户自定义的对象很多。C+的类机制允许它可以建立一个可控制的输入输出系统。可以通过重载“”算符来解决以上的问题。 流 stream 在数据从一个对象流动到另一个对象的过程中,无论是否对数据进行缓冲或对数据进行格式变换,这种流动都被抽象为流。,流类库,流类库是提供一组类,程序利用它们可以方便的与外部世界交换数据. C+的流类库是用继承的方

3、法建立起来的一个输入输出类库。 流类库有两个基类,即streambuf类和ios类。 streambuf类提供对缓冲区的低级操作,如缓冲区的设置、缓冲区的读写等。 ios类用来完成检查错误的格式化输入、输出。,流类库的结构,I/O流类继承层次,ios istream istrstream istream_withassign ifstream ostream ostrstream ostream_withassign ofstream,Iostream fstream strstream stdiostream,I/O流类继承层次,Class ios; class istream: virtu

4、al public ios; class ostream: virtual public ios; class iostream: public istream,public ostream; 又如: class istream_withassign: public istream; class ostream_withassign: public ostream;,输出流和输出流对象,输出流对象是信息流动的目标. ostream, ofstream和ostrstream是三个最重要的输出流. ostream类通过派生类ostream_withassign支持预先定义的流对象 cout 标准输

5、出 cerr 标准错误输出,没有缓冲,发给它的内容立即输出 clog 类似于cerr,但有缓冲,缓冲区满时被输出. ofstream类支持磁盘文件输出. ostrstream类支持输出字符串。,流类库和流,C+中预定义了流类对象: 标准输入流 cin 标准输出流 cout 非缓冲的出错流 cerr 和缓冲的出错流 clog 每个流都和一种与设备相联系: 与输入设备(如键盘)联系的流为输入流; 与输出设备(如屏幕)联系的流为输出流。,流类对象的操作,流类对象在使用前要被建立,在使用后要被删除; 使用特定的操作能够从流中获取数据 称为提取操作 ,带空格space的字符串的输入方法,#include

6、 void main( ) /读入一串字符到line数组,以t终止 char line100; cout读入字符串时,在遇到第一个空格字符后输入将停止。,11.2 重载I/O运算符,对于“”运算符的重载 istream ,11.2.1 重载输出算符“”,定义输出运算符重载函数的一般格式如下: ostream public: Date( int m, int d, int y ) mo = m; da = d; yr = y; friend ostream ,11.2.2 重载输入运算符“”,class user_type . friend istream/返回流对象 ,【例11.3】 在Dat

7、e类中重载了输入运算符“”,istream ,11.2.3 综合应用举例,#include class complex/定义complex类 float real,image; public: complex(float r, float i) real=r; image=i; complex() real=0; image=0; friend complex operator+(complex,complex); friend ostream ,用输出/入复数,用输出/入复数,/定义重载运算符+ complex operator +(complex a,complex b) complex

8、temp; temp.real=a.real+b.real; temp.image=a.image+b.image; return temp; ,用输出/入复数,/定义重载运算符0) output“+”; if(obj.image !=0) outputobj.imagei; return output; ,用输出/入复数,/定义重载运算符 istream ,用输出/入复数,/主函数 main( ) complex c1(2.4, 4.6), c2, c3; coutc2; cout “The value of c2 is:”c2endl; c3=c1+c2; cout “The value

9、of c3 is:”c3endl; return 0; ,用输出/入复数,/运行结果: The value of c1 is:2.4+4.6i Input the real and image of a complex: 3.7 2.5 The value of c2 is:2.4+4.6i The value of c3 is:2.4+4.6i,11.3 输入输出格式控制,插入运算符与预先定义的操纵符一起工作,用来控制输出格式。 通过已定义的操纵符可以控制输出宽度、输出格式、输出精度等。,11.3.1 使用ios的成员函数来控制输入输出数据的格式,在流类库中的基类ios类中定义了表示和控制输

10、入输出数据格式状态(format state)的格式标志位(fmtflags), 表11.2中列出了所有的格式标志位。 例如left标志位表示输出数据左对齐,scientific标志位表示输出的浮点数据将以科学记数法格式输出。 通过修改流对象的格式标志位(fmtflags)就能够精确控制输入和输出数据的格式。,设置格式标志位,我们可以使用ios类的成员函数setf( )来设置标志位。 该函数的原型如下: fmtflags setf(fmtflaqs flags); 在ios类中的还有其他几个与输入输出数据格式有关的成员函数,这些函数可以设置输出数据的精度和宽度以及填充字符。,【例11.6】使用

11、函数setf( )来设置标志位,#include using namespace std; int main() cout.setf(ios:showpos); cout.setf(ios:scientific); cout 1999 3.1415926 endl; cout.setf(ios:uppercase); cout 1999 3.1415926 endl; cout.setf(ios:fixed); cout 1999 3.1415926 endl; return 0; ,【例11.6】输出结果,该程序运行后的输出结果为: +1999 +3.141593e+000 +1999 +3

12、.141593E+000 +1999 +3.14159,控制输出数据的宽度,可使用setw操纵符或width成员函数来控制每个输出项的输出宽度: #include void main( ) doubl evalues=1.23,35,36,653.7,4358.24; for (int i=0;i4;i+) cout.width(10); coutvaluesIn; ,11.3.2 使用操纵符来控制输入输出数据的格式,在C+输入输出系统中还可以通过C+流类库中预定义的操纵符来控制输出宽度、输出格式、输出精度等。 操纵符是一种特殊的函数,它们可以包含在输入输出表达式中。 请参见表11.3 标准C

13、+输入输出操纵符,【例11.8】用setw操纵符来控制输出宽,#include #include /必须包含iomanip头文件 using namespace std; int main( ) double values=1.23,35.36,653.7,4358.24; char *name =Bill,David,Frank, John; for (int i=0;i4;i+) coutsetw(6)namei setw(10)valuesin; return 0; ,【例11.8】输出结果,该程序运行后的输出结果为: Bill 1.23 David 35.36 Frank 653.7

14、John 4358.24,控制输出格式,用setiosflags操纵符来设置输出格式,输出结束后,再用 resetiosflags操纵符取消设置的格式,恢复缺省的格式。 具体的格式由格式标志值指定 可以设置的格式包括:对齐方式,数据的数制(十进、八进、十六进制)、浮点数显示格式等。 格式标志值可以用OR运算(|)进行组合。,设置输出数据对齐方式,#include #include using namespace std; void main( ) double values=1.23, 35.36,653.7,4358.24; char*names=Zoot, Jimmy, Al, Stan;

15、 for(int i=0;i4;i+) coutsetiosflags(ios:left)/左对齐 setw(6)namesI resetiosflags(ios:left)/恢复默认 setw(10)valuesIend1; ,用setprecision操纵符控制输出精度,#include #include void main( ) double values=1.23,35.36,653.7,4358.24; char*names=Zoot, Jimmy, Al, Stan; for(int i=0;i4;i+) coutsetiosflags(ios:left) setw(6)namesi resetiosflags(ios:left) setw(10)setprecision(1)valuesIendl; ,程序运行结果: Zoot 1 Jimmy 4e+001 Al 7e+002 Stan 4e+003 若改为setprecision(3),即3位有效数字,结果成为: Zoot 1.23 Jimmy 35.4 Al 654 Stan 4.36e+003 原数据为: 1.23, 35.36, 653.7, 4358.24 不必使用resetprecision,可直接修改精度。,用dec,oct和

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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