在C++中,输入输出是通过流完成的。
C++的输出操作将一个对象的状态转换成一个字符序列,输出到某个地方。 输入操作则是从某个地方接收一个字符序列,然后将其转换成一个对象的状态所要求的格式。
把接收存放输出数据的地方叫做目标,把输入数据来自的地方叫做源,输入和输出操作可以看成字符序列在源、目标和对象之间的流动。
C++把与输入和输出有关的操作定义为一个类,放在一个系统库里,供用户调用。 这个执行输入和输出操作的类叫做流类,用流类定义的对象称为流对象。提供流类实现的系统叫做流类库。
1、 流类库

说明:
(1)ios是“输入输出流”类,为用户的输入输出提供服务,streambuf是处理“流缓冲区”的类,包括缓冲区起始地址、读写指针和对缓冲区的读写操作。
(2)图7-1是简化的流类库的基本类等级图,而不是直接的继承关系图。其实它们都是模板类,箭头表示的是类等级关系。
(3) 图中的等级关系在头文件iostream.h中说明。
(4)图7-1中,ios类中一个指针成员指向streambuf类的对象。Streambuf类管理流的缓冲区。
(5)由于数据隐蔽和封装的需要,普通用户只使用ios、istream和ostream类提供的公有接口,完成流的提取和插入操作。
(6)ios类是istream类和ostream类的虚基类,提供对流的格式化I/O操作和错误处理的成员处理的成员函数。从ios类公有派生珠istream类和ostream类分别提供对流进行提取和插入操作的成员函数,而iostream类通过组合istream类和ostream类支持对一个流进行双向操作,它并没有提供新成员函数。
(7) iostream中预定义四个流对象,它们分别是cin、cout、cerr、clog。
事实上可以将cin视为istream的一个对象,而cout视为ostream的一个对象。
流是一个抽象的概念,当实际进行I/O操作时,必须将流和一个具体的物理设备连接起来。
C++的流类库预定义的四个流所连接的设备如表7-1
| 流 | 设备 |
| cin | 标准输入设备 |
| cout | 标准输出设备 |
| cerr | 标准错误输出设备(非缓冲方式) |
| clog | 标准错误输出设备(缓冲方式) |
2、与iostream类库有关的头文件
iostream类库中不同的类的声明被放在不同的头文件中,用户在程序中用#include命令包含所需的头文件就相当于在程序中声明了所需的类。
(1)iostream 输入输出流操作
(2)fstream 管理文件的I/O操作
(3)strstream 字符流的I/O操作
(4)stdiostream 混合使用C和C++
(5)iomanip 使用格式化I/O操作
在iostream头文件中重载了>> 和<<运算符。用于标准类型数据的输入和输出。

