我们的程序已经使用了很多IO库设施:
- istream(输入流)类型,提供输入操作。
- ostream(输出流)类型,提供输出操作。
- cin,一个istream对象,从标准输入读取数据。写入到标准错误。
- cout,一个ostream对象,向标准输出写入数据。
- cerr,一个ostream对象,通常用于输出程序错误消息,
- >>运算符,用来从一个istream对象读取输入数据。
- <<运算符,用来向一个ostream对象写入输出数据。
- getline函数,从一个给定的istream读取一行数据,存入一个给定的string对象中。
IO类
到目前为止,我们已经使用过的IO类型和对象都是操纵char数据的。
默认情况下,这些对象都是关联到用户的控制台窗口的。
当然,我们不能限制实际应用程序仅从控制台窗口进行IO操作,应用程序常常需要读写命名文件。而且,使用IO操作处理string中的字符会很方便。此外,应用程序还可能读写需要宽字符支持的语言。
为了支持这些不同种类的IO处理操作,在istream和ostream之外,标准库还定义了其他一些IO类型,我们之前都已经使用过了。
下表列出了这些类型,分别定义在三个独立的头文件中:
- iostream定义了用于读写流的基本类型,
- fstream定义了读写命名文件的类型,
- sstream定义了读写内存string对象的类型。
头文件 | 类型 |
iostream | istream, wistream从流读取数据 ostream, wostream向流写入数据 iostream, wiostream读写流 |
fstream | ifstream,wifstream从文件读取数据 ofstream, wofstream向文件写入数据 fstream,wfstream读写文件 |
sstream | istringstream,wistringstream从string读取数据 ostringstream, wostringstream向string写入数据 stringstream, wstringstream读写string |
为了支持使用宽字符的语言,标准库定义了一组类型和对象来操纵 wchar_t类型的数据。宽字符版本的类型和函数的名字以一个w开始。
例如,wcin、 wcout 和wcerr是分别对应cin、cout 和cerr的宽字符版对象。宽字符版本的类型和对象与其对应的普通char版本的类型定义在同一个头文件中。
例如,头文件fstream定义了ifstream和wifstream类型。
IO类型间的关系
概念上,设备类型和字符大小都不会影响我们要执行的操作。
例如,我们可以用>>读取数据,而不用管是从一个控制台窗口,一个磁盘文件,还是一个string读取。类似的,我们也不用管读取的字符能存入一个char对象内,还是需要一个wchar_t对象来存储。
标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制实现的。
利用