首页 理论教育 C++STL中stream类别解析

C++STL中stream类别解析

时间:2023-10-25 理论教育 版权反馈
【摘要】:class ostream,该类用于定义输出流,可用来写出数据。事实上整个IOStream程序库均不依赖任何特定的字符型别,而以一个template参数替代之。要写入文件,需要创建一个ofstream对象,并使用ostream方法。

C++STL中stream类别解析

对于不同种类的I/O(输入、输出、文件存取),其中最重要的是:

•class istream,该类用于定义输入流,可用来读取数据。

•class ostream,该类用于定义输出流,可用来写出数据。

•class ofstream,该类用于既可以实现文件输入,也可以实现文件输出。

1.istream类和ostream类

两者的具体实现为template class basic_istream< >和basic_ostream< >,以char作为字符型别。事实上整个IOStream程序库均不依赖任何特定的字符型别,而以一个template参数替代之。此种参数化在string类中也存在。

IOStream 程序库定义了整个型别为istream和ostream的全局对象,与标准的I/O通道相对应。前面已讲过:

cin 是供使用者输入用的标准输入通道,对应于cstdin。操作系统通常将它和键盘连接。

cout 是供使用者输出用的标准输出通道,对应于cstdout。操作系统通常将它和屏幕连接。(www.xing528.com)

cerr 是所有错误信息所使用的标准错误输出通道,对应于cstderr。操作系统通常将它和监视器连接。缺省情况下,cerr无缓冲装置。

clog 是标准日志通道,没有对应物。默认情况下,操作系统将它连接入cerr所连接的装置。clog设有缓冲装置。

“正常输出”和“错误信息的输出”需要分离,需要让程序以不同的方式对待两种输出。例如,可以将正常输出重新定向至某个文件,而同时仍然令错误信息显示于控制台。前提是操作系统必须支持标准I/O通道的重定向功能。这种分离方式起源于UNIX的I/O重定向概念。

ostream类派生自std::ios类,用来处理流的输出。std::cout对象是std::ostream类的外部对象。cout对象在库中声明,cout的extern声明出现在<iostream>中,因此凡是包含头文件<iostream>的程序均可使用cout对象。程序通过使用重载“<<”插入符来写std::os-tream对象,std::ostream类具有的“<<”插入运算符足以支持把大多数标准C++数据类型写到输出流中。

std::istream类管理流输入的方式和std::ostream类管理流输出的方式相同。在头文件<iostream>中声明,std::cin对象从标准输入设备中读取数据。std::istream类使用重载“>>”抽取运算符来读取输入。重载“>>”抽取运算符足以支持读取标准C++数据类型的数据。用户自定义的类可以通过重载“>>”运算符,实现从std::istream对象中读取数据。

2.ofstream类

C++ I/O类软件包处理文件输入和输出的方式与处理标准输入和输出的方式非常相似。要写入文件,需要创建一个ofstream对象,并使用ostream方法。例如“<<”插入符或write()。当读取文件时,需要创建一个ifstream对象,并使用istream方法。例如“>>”抽取操作符或get()。文件管理是非常复杂的,在使用ofstream时必须将文件和流关联,并且还分多种操作模式(只读、只写和读写);写文件时,还需要创建新文件、取代旧文件或添加到旧文件中,还可能在文件中来回移动文件指针。为实现对文件的复杂操作,STL增加了用于文件输入的类(ifstream)、用于文件输出的类(ofstream)以及用于同步文件输入/输出类(fstream)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈