几个流类及其关系

image.png
为了避免多继承的二义性,从ios派生出istream和ostream时,均使用virtual关键字(虚继承)。

  • istream是用于输入的流类,cin就是该类的对象。
  • ostream是用于输出的流类,cout就是该类的对象。
  • ifstream是用于从文件读取数据的类。
  • ofstream是用于向文件写入数据的类。
  • iostream是既能用于输入,又能用于输出的类。
  • fstream是既能从文件读取数据,又能向文件写入数据的类。

    标准流对象

    iostream头文件中定义了四个标准流对象,它们是cin、cout、cerr和clog。

cin对应于标准输入流,用于从键盘读取数据,也可以被重定向为从文件中读取数据。
cout对应于标准输出流,用于向屏幕输出数据,也可以被重定向为向文件写入数据。
clog对应于标准错误输出流,用于向屏幕输出错误信息,不能被重定向。
cerr和clog的区别在于:cerr不适用缓冲区,直接向显示器输出信息;而输出到clog中的信息会先被存放到缓冲区,缓冲区满或者刷新时才输出到屏幕。

ostream类的无参构造函数和复制构造函数都是私有的,因此在程序中一般无法定义ostream类的对象,唯一能用的ostream类的对象就是cout。

cout可以被重定向,而cerr不能。所谓重定向,就是将输入的源或输出的目的地改变。例如,cout本来是输出到屏幕的,但是经过重定向,本该输出到屏幕上的东西就可以被输出到文件中。

二进制文件和ASCII文件

对二进制文件的读写主要用istream类的成员函数read和write来实现的

对ASCII文件的读写操作有两种方法:
(1)用流插入运算符“<<”和流提取运算符“>>”输入输出标准类型的数据。
(2)用put、get、getline等成员行数进行字符串的输入输出。