zoukankan      html  css  js  c++  java
  • 8.1 C++输入输出类的层次

    参考:http://www.weixueyuan.net/view/6407.html

    总结:  

      在C++中,输入输出数据的传送过程我们称之为流,一个流就是一个字节序列,对流可以进行读或写操作。

      输入输出类层次可以分为输入输出流类层次和缓冲类层次。

      在C++中,输入输出流层次是从ios_basic类开始的,该类作为所有类的基类,之后它派生出了basic_ios类。  

      在C++中输入和输出并不是直接地进行读和写操作的,通常读和写操作是通过一个缓冲区来进行的。

      在缓冲类层次中,所有缓冲类都从公共基类basic_streambuf类派生而来。

      在程序中声明头文件,就相当于在程序中声明了相关的类,可以说头文件是程序与类库的接口。

    在C++中,输入输出数据的传送过程我们称之为流,一个流就是一个字节序列,对流可以进行读或写操作。

    输入输出类层次可以分为输入输出流类层次和缓冲类层次,我们先来看一下C++的输入输出流类层次,见下图。


    在C++中,输入输出流层次是从ios_basic类开始的,该类作为所有类的基类,之后它派生出了basic_ios类,这两个类是整个输入输出流类层次的基类,但是它们在功能上有些区别:ios_basic和basic_ios都在一定程度上描述了流的基本性质,但是ios_basic并没有考虑流的字符集,而basic_ios在描述流的基本性质时考虑了此点。

    之后则从basic_ios类中派生出了basic_istream和basic_ostream类,其中basic_istream类用于描述输入流而basic_ostream用于描述输出流。 basic_istream和basic_ostream类分别继承了ios_base和basic_ios类中的成员函数,并且增添了自己的成员函数,例如分别对左移操作符和右移操作符的重载函数。

    basic_iostream类则是同时继承了basic_istream类和basic_ostream类,该类并没有新增成员变量,在成员函数方面,它也只是增添了构造函数和析构函数。而basic_ifstream和basic_ofstream类,这两个类分别继承自basic_istream类和basic_ostream类,basic_ifstream和basic_ofstream类主要是对文件进行读写操作。

    在C++中输入和输出并不是直接地进行读和写操作的,通常读和写操作是通过一个缓冲区来进行的。当计算机收到写字符的请求时,计算机并不会将等待写入的字符直接写入到输出流中,而是将其先写到缓冲区中,然后定期地将缓冲区中的字符写入到输出流中,此过程我们称之为清扫缓冲区,通常缓冲区满或者换行符会带动一次将缓冲区中的字符写到输出流中。读入操作也同样会经过缓冲区,也有类似的过程。

    在缓冲类层次中,所有缓冲类都从公共基类basic_streambuf类派生而来,见下图。字符流缓冲类basic_stringbuf和文件缓冲类basic_filebuf,这两个类为输入输出类提供输入输出服务,它们从basic_streambuf类中继承了对缓冲区读写操作的函数。


    在程序中声明头文件,就相当于在程序中声明了相关的类,可以说头文件是程序与类库的接口,在大致了解了输入输出类层次之后,我们来看一下头文件的用途。

    头文件用途
    iosfwd 包含一些基本的类声明
    iostream 声明了cin、cout等对象
    ios 声明了ios_base类和basic_ios类
    streambuf 声明了basic_streambuf类
    istream 声明了basic_istream类和basic_iostream类
    ostream 声明了basic_ostream类
    iomanip 声明了用于格式化处理的操纵符
    sstream 声明了basic_stringbuf类和stringstream类
    fstream 声明了basic_filebuf类和fstream类

     
    在这些头文件中我们常用头文件有:iostream、fstream、strstream、iomanip。Iostream头文件中包含了对输入输出流进行操作所需要的基本信息,fstream则用于对文件的读写操作,strstream头文件可以用于输入输出字符串,而iomanip则主要是用于格式化输入输出。

  • 相关阅读:
    【原创】开源Math.NET基础数学类库使用(01)综合介绍
    【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合
    【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成
    apply,call,bind的区别
    javascript替换手机号中间4位
    css常见的概念
    关于URL编码/javascript/js url 编码
    jquery判断div滚动条到底部
    javascript中的array对象属性及方法
    localStorage和sessionStorage区别
  • 原文地址:https://www.cnblogs.com/yongpan/p/7988256.html
Copyright © 2011-2022 走看看