必备技能11.2:C++中的流类
正如我们在第一篇中学习到的那样,C++中对输入输出系统的支持都是在<iostream>中提供的。在该头文件中定义了一些相当复杂的类层次的集合,它们用来支持输入和输出的操作。输入输出类是从一个系统模版类开始的。我们将在地12篇中学习到,模版定义了类的通用形式,而不用具体指明这些类操作的数据的类型。标准C++从这些模版中定义了两个具体的和输入输出库相关的类:其中一个是针对8位字符集的,一个是针对宽位字符集的。这些类和其它的类一样,我们不需要熟悉模版相关的知识也能很好地使用这些输入输出的功能。
C++中的输入输出系统是基于两个相关但是又有区别的模版类的。一个是从低级的输出输出类继承而来的,叫做basic_streambuf。这个类提供基础的低级的输入和输出操作,并提供了对整个C++输入输出系统的支持。我们没有必要直接使用basic_streambuf这个类,除非我们要进行高级的输入输出编程。类层次中我们经常用到的是从basic_ios派生的类。这是一个高级的输入输出类。它提供了格式化,错误检查以及输入输出流的状态信息。basic_ios是多个派生类的基类,包括basic_istream、asic_iostream和basic_iostream。它们可以分别北用来创建用于输入、输出、输入和输出的流。
正如我们解释的那样,输入输出库中创建了两个版本的输出输出类层次:一个是针对8位的字符集的;一个是针对宽位字符集的。本书中我们只讨论针对8位字符集的类,这是因为到目前为止,它是最常用到的。下面是模版类名称和基于字符的类名称的对应表:
模版类名称 | 对应的基于字符的类名称 |
basic_streambuf | streambuf |
basic_ios | ios |
basic_istream | istream |
basic_ostream | ostream |
basic_iostream | iostream |
basic_fstream | fstream |
basic_ifstream | ifstream |
basic_ofstream | ofstream |
我们将在本书的后面使用到上面的基于字符的类名。这些类也是我们在程序中要用到的类,也是在老版本的输入输出库中用到的名称。这也是为什么老版本的和新版本的输入输出库在源码级上是兼容的。
最后一点:类ios包含了许多成员函数和变量用来控制或者件事流的基本操作。我们将经常引用这些成员函数或者变量。牢记,只要我们在程序中包含了<iostream>,我们就可以访问这个重要的类了。
练习:
1. 什么是流?什么是文件?
2. 和标准输出相关联的类是哪个类?
3. C++中的输入输出是由一系列成熟的类层次来支持的,对吗?