7.1.1  stream对象

7.1.1 stream对象

1.输入流和输出流对象

C++ I/O由stream完成。所谓stream,即一条数据“流”,字符序列在其中“川流不息”。按面向对象原则,stream是由某个类别定义的具有特定性质的对象。C++流被实现为类模板。std::cout和std::cin对象是std::ios的派生类的全局实例对象,尽管后面将使用std::ios定义的常量和函数——包括std::ios::beg和std::ios::setprecision(int)。程序主要处理的对象类型均派生自std::ios类。这些类对象调用的成员函数均是在ios类中定义的。

stream主要包括输出流和输入流。输出操作被解读为“数据流入stream”,输入操作则被解读为“数据流出stream”。stream还包括一些为标准I/O通道而定义的全局对象。

C++的iostream类库管理了诸多细节。例如,若程序中包含iostream文件,则将自动创建8个stream对象(4个用于窄字符,4个用于宽字符)。

1)cin对象与标准输入stream相对应。默认情况下,stream被关联到标准输入设备(键盘)。Wcin对象与此类似,处理的是wchar_t类型。

2)cout对象与标准输出stream相对应。默认情况下,这个stream被关联到标准输出设备(显示器)。wcout对象与此类似,处理的是wchar_t类型。

3)cerr对象与标准错误stream相对应,可用于显示错误信息。默认情况下,此stream被关联到标准输出设备(显示器)。这个stream没有缓冲,意味着信息将被直接发送至屏幕,不会等到缓冲区填满或新的换行符。werr对象与此类似,处理的是wchar_t类型。

4)clog对象同样对应标准错误stream。默认情况下,这个stream被关联到标准输出设备(通常为显示器)。但此stream有缓冲。wclog对象与此类似,但处理的是wchar_t类型。

当iostream文件为程序声明一个cout对象时,该对象将包含存储了与输出有关信息的数据成员,如显示数据时使用的字段宽度、小数位数、显示整数时采用的计数方法以及描述用来处理输出流的缓冲区的streambuf对象的地址。cout对象凭借streambuf对象的帮助管理流中的字节流。

2.文件流对象

文件流对象是用于文件操作过程中。程序需要实例化文件流类的对象,文件流类包括ofstream、ifstream和fstream。这3个类分别支持文件输入、输出以及兼具输入和输出。程序需要在流类的构造函数中包括实参,或者实例化没有初始化的文件流对象。