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