一、流类的继承关系
在C++语言中,为数据的输入和输出定义了一系列类库,主要包括:
ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrstream,strstream等,其中ios为根基类,其余都是它的直接或间接派生类。其关系如图13-1所示。
ios为根基类,它直接派生四个类:输入流类istream、输出流类ostream、文件流基类fstreambase和串流基类strstreambase,输入文件流类同时继承了输入流类和文件流基类(当然对于根基类是间接继承),输出文件流类ofstream同时继承了输出流类和文件流基类,输入串流类istrstream同时继承了输入流类和串流基类,输出串流类ostrstream同时继承了输出流类和串流基类,输入输出流类iostream同时继承了输入流类和输出流类,输入输出文件流类fstream同时继承了输入输出流类和文件流基类,输入输出串流类strstream同时继承了输入输出流类和串流基类。
二、流类库的文件包含关系
各个流类在文件中的包含关系如表13-1。
表13-1 流类包含关系
    
        
            | 分 类 | 类 名 | 说 明 | 包含文件 | 
        
            | 抽象流基类 | ios | 流基类 | ios | 
        
            | 输入流类 | istream | 通用输入流类和其他输入流的基类 | istream | 
        
            | ifstream | 输入文件流类 | fstream | 
        
            | istringstream | 输入串流类 | sstream | 
        
            | 输出流类 | ostream | 通用输出流类和其他输出流的基类 | ostream | 
        
            | ofstream | 输出文件流 | fstream | 
        
            | ostringstream | 输出串流 | sstream | 
        
            | 输入/输出流类 | iostream | 通用输入/输出流类和其他输入/输出流类的基类 | istream | 
        
            | fstream | 输入/输出文件流类 | fstream | 
        
            | stringstream | 输入/输出串流类 | sstream | 
        
            | 流缓冲区类 | streambuf | 抽象流缓冲区基类 | streambuf | 
        
            | filebuf | 磁盘文件的流缓冲区类 | fstream | 
        
            | stringbuf | 串的流缓冲区类 | sstream | 
    
 
当程序需要进行标准I/O操作的时候,必须包含头文件iostream。
当程序需要进行文件I/O操作的时候,必须包含头文件fstream。
当程序需要进行串I/O操作的时候,必须包含头文件sstream。
三、预定义流类对象
C++语言系统不仅定义了大量的输入输出流库供用户使用,还定义了四个常用的类对象,方便用户进行标准的I/O操作,如表13-2。
表13-2 C++常用的四个类对象
    
        
            | 名称 | 说 明 | 流 类 | 
        
            | cin | 代表标准输入设备(键盘),又叫标准输入流或cin流。 | istream | 
        
            | cout | 代表标准输出设备(显示器),又叫标准输出流或cout流。 | ostream | 
        
            | cerr | 错误信息输出设备(显示器),非缓冲输出。 | 
        
            | clog | 错误信息输出设备(显示器),缓冲输出。 | 
    
 
 【例13-1-1】 下边的代码用到标准I/O的实现。
源代码:
/* 例13-1-1,13-1-1.cpp */
#include<iostream>
using namespace std;
void main()
{
     int a, b, c;
     cout << "input a=";           //标准输出流(数据从输出流流向标准输出设备)
     cin >> a;                           //标准输入流(数据从标准输入设备流向输入流)
     cout << "input b=";    //标准输出流(数据从输出流流向标准输出设备)
     cin >> b;                           //标准输入流(数据从标准输入设备流向输入流)
     c = a + b;
     cout << "c=" << c << endl;       //标准输出流(数据从输出流流向标准输出设备)
}
 例文件I/O的实现
【例13-1-2】 标准I/O的实现。
源代码:
/* 例13-1-2,13-1-2.cpp */
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void main()
{
       char* s="This is a file.";
       ofstream my_ofstream("code.dat"); //定义一个输出文件流对象
       my_ofstream.write(s,strlen(s));        //调用该输出文件流对象的write()操作
       my_ofstream.close();                       //关闭输出文件流对象
       ifstream my_ifstream("code.dat");           //定义一个输入文件流对象
       char ch;
       while(my_ifstream.get(ch))               //循环把文件中所有字符读入输入文件流对象
       {
              cout<<ch;
       }
       my_ifstream.close();                        //关闭输入文件流对象
}