在 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 则主要是用于格式化输入输出。

C++输入输出类的层次相关推荐

  1. 博为峰Java技术题 ——JavaSE Java Swing组件类的层次

    2019独角兽企业重金招聘Python工程师标准>>> 博为峰小博老师: 下图讲述Swing组件类的层次,如图: 从以上的结构示意图中可以知道,Swing组件可以分成两种类型,一种是 ...

  2. 【MFC】类的层次结构图

    00. 目录 文章目录 00. 目录 01. 继承CObject的类 02. 继承CCmdTarget的类 03. 继承CWnd的类 04. 其它类 05. 层次结构图类别 06. 附录 01. 继承 ...

  3. 【python】内建异常类的层次

    内建异常类的层次 BaseException+-- SystemExit+-- KeyboardInterrupt+-- GeneratorExit+-- Exception+-- StopItera ...

  4. 评价类模型——层次分析法

    评价类模型--层次分析法 注:以下故事纯属虚构,部分背景及人物姓名设定借用<你好,旧时光>这部剧,但与原剧基本无关,如有情节雷同,纯属巧合. Q:余周周同学遇到三位追求者,这三位候选人分别 ...

  5. 第九天:信息打点--个人博客项目输入输出类留言板访问IPUA头来源

    个人博客项目&输入输出类&留言板&访问IP&UA头&来源 1.PHP-全局变量$_SERVER:[补完基础我回来解释,暂时不是很明白] 2.MYSQL-插入语法 ...

  6. java中printreader类_Java基本字符流输入输出类的使用

    1. 基本字符输入输出类结构 Java基本字符流类结构 2. 抽象父类:Writer & Reader Writer类 public abstract class Writer extends ...

  7. SAP MM 物料主数据的重要概念:物料类型、物料组、评估类(物料层次)

    物料主数据的重要概念:物料类型.物料组.评估类 (评估级别) 物料主数据是各业务部门,特别是物流相关部门的重要信息媒介,物料主数据所包含的信息非常丰富,可以涵盖物资的采购信息.销售信息.生产信息.财务 ...

  8. QT笔记--QT内类的层次关系,以及控件从属关系

      QT窗口界面使用的类层次如下(只包含了直接使用部分)   界面上每一个创建的控件,都是一个控件类的对象,定义在头文件ui_mainwindoow.h的类UI_MainWindow中,并且其中的成员 ...

  9. tchar 输入输出类 和 string 类 函数简单说明

    标准输入输出 printf类 _tprintf : 类同printf _tprintf_l : 类同printf, 但是"_l"表示第二个参数是一个locale. locale是操 ...

最新文章

  1. arthas-boot.jar 工具的简单使用
  2. boost::core模块实现分配器重新绑定的实例
  3. scrapy 采集网页出现丢失url的问题
  4. CCIE-LAB-第五篇-SDN-SD-WAN-BGP-OMP(sdwan版的路由协议)
  5. Ext js call方法
  6. python unit test_Python Unittest
  7. Web开发面临的挑战主要有哪些?
  8. 从Java到Ruby——我的最近一次技术转型
  9. 第十三天-企业应用架构模式-对象-关系元数据映射模式
  10. 让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑.
  11. 运筹系列58:python使用numba进行加速
  12. The program 'roscore' is currently not installed. You can install it by typing: sudo apt install pyt
  13. 解决W5500,DHCP获取IP地址失败的问题,移植官方例程需要特别注意!!!
  14. MSP430F149 IO端口
  15. 号称全网最全CAD组合键功能详解
  16. live555直播startplaying
  17. 【磁盘调度算法】磁盘调度模拟的设计与分析
  18. 《银影侠》独立电影可能会真的成行了
  19. [置顶] CVT广州视源笔试面试经历(2013实习生招聘)
  20. 8000字长文带你了解真实的山东大学软件园校区

热门文章

  1. drupal与html转换,老葛 怎么改变drupal form 生成的html啊 ? | Think in Drupal
  2. 【OMP信道估计】基于OMP压缩感知的信道估计算法的MATLAB仿真
  3. 基于相空间重构的混沌背景下微弱信号检测方法仿真
  4. 串口同步通信和串口异步通信
  5. ES6之---读懂let才能少踩坑
  6. 学习ansible playbook之前先了解下YAML语法
  7. TestNG方法測试及注意要点 代码及配置具体解释(解决testng方法不运行问题)
  8. 架构设计中服务层的简单理解
  9. 《JAVA编程思想》学习笔记——第三章 操作符
  10. 如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧(一)