C++大学基础教程第 12章 I/O流及输入输出北京邮电大学电信工程学院计算机技术中心
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -2-
C++语言没有输入 /输出语句,但
C++编译系统带有一个面向对象的输入 /输出软件包,它就是 I/O
流类库。软件包有时称为库文件
(.lib文件 ),类库是指用面向对象方法实现的软件包。
12.1 流类库概述
12.2 输出流
12.3 输入流
12.4 输入 /输出流
12.5 重载插入和提取运算符第 12章 I/O流及输入输出
12.1 流类库概述
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -5-
第 12章 流类库概述
C++语言没有输入 /输出语句,但 C++编译系统带有一个面向对象的输入 /输出软件包,它就是 I/O流类库。
在 C++中,将数据从一个对象到另一个对象的流动抽象为,流,,这里的对象指程序或者,文件,。注意,输入输出是相对与程序而言的。
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -6-
在 C++中,用面向对象的方法来实现流。为了实现流,定义了几种流类:
ios是抽象流基类
ios的派生类 istream是输入流基类
ios的派生类 ostream是输出流基类
iostream是输入 /输出流类,它由 istream和
ostream两个基类共同派生出来输入流基类、输出流基类和输入 /输出流类又各自派生出三个子类第 12章 流类库概述
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -7-
从程序的角度来看,可能需要从输入流中获取数据,称为提取操作,可能需要向输出流中添加数据,称为插入操作。
在 I/O流类中定义了若干成员函数,其中有两个特殊的成员:
提取运算符,>>
插入运算符,<<
第 12章 流类库概述
12.2 输出流
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -9-
系统已经定义了标准设备输出流类,并且已经定义了该类的对象:
cout 标准输出,缓冲区满时被输出 。
cerr 标准错误输出,没有缓冲,发送给它的内容立即被输出 。
clog 类似于 cerr,但是有缓冲,缓冲区满时被输出 。
程序中只需 #include <iostream.h>,可以直接使用这些对象,从键盘输入,向显示器输出 。
1、设备输出流
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -10-
标准输出设备一般指显示器,但可以在操作系统下修改为别的设备,比如,重定向为磁盘文件。
流 cerr和 clog把信息输出到默认错误日志上,该日志通常是指显示器,不能重定向。
1、设备输出流
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -11-
可以使用操纵符或调用成员函数进行输出格式控制。
1、设备输出流
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -12-
ostream类的派生类 ofstream类支持向磁盘文件输出。
如果程序需要把数据信息输出到磁盘文件,可以构造一个 ofstream类的对象。
可以在定义流对象的同时,指定相关联的文件;也可以先定义流对象,随后调用 open成员函数,指定相关联的文件并打开。
2、文件输出流
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -13-
在输出到文件时,同样可以使用操纵符,
或使用与操纵符等价的成员函数进行格式控制。
2、文件输出流
12.3 输入流
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -15-
系统已经预先定义了标准设备输入流,
并且已经定义了该类的对象 cin。一般不需要构造新的设备输入流对象,只使用预先定义的 cin对象。
从输入流提取时,也可以使用的操纵符进行输入格式的控制 。
从输入流提取时,也可以使用流类定义的函数进行输入操作 。
1、标准设备输入流
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -16-
文件输入流类 ifstream,支持从磁盘文件读取。
如果需要一个仅用于读取的磁盘文件,可以构造一个 ifstream类的对象,并且可以指定使用二进制或文本模式。
可以在定义流对象的同时,指定相关联的文件,
在构造该对象时自动打开文件;也可以先定义流对象,随后调用 open成员函数,指定相关联的文件并打开。
2、文件输入流
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -17-
很多格式化选项和成员函数都可以应用于 ifstream类对象
2、文件输入流
12.4 输入 /输出流
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -19-
输入输出流类 iostream,该类对象可以是数据的源或目的。
iostream类有一个重要的派生类:
fstream,它支持磁盘文件的输入和输出,
如果程序需要对同一个磁盘文件既要读又要写,可以构造一个 fstream对象。
12.4 输入 /输出流
12.5 重载插入和提取运算符
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -21-
12.5 重载插入和提取运算符预定义的插入和提取运算符可以处理基本数据类型的输入输出问题,而用户自定义的类如果希望使用插入运算符执行输出,把类的信息插入到一个输出流
ostream中,就需要在类中重载插入运算符,提取运算符也一样 。
重载插入和提取运算符的特性使得 I/O
流可扩展 。
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -22-
重载的运算符形式如下:
istream & operator >> (istream & ins,MyClass & obj);
ostream & operator << (ostream & outs,MyClass & obj);
注意:不能将重载的插入和提取运算符定义为类的成员函数,只能定义为一般的函数或者类的友元函数 。
12.5 重载插入和提取运算符
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -23-
作业
2009-7-29 北京邮电大学电信工程学院计算机技术中心 -24-