在 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. 活久见: 原来 Chrome 浏览器支持 Import from 语法
  2. wxWidgets:wxCondition类用法
  3. Android RecyclerView详解
  4. python程序设计题答案_《Python程序设计》习题与答案
  5. 前端学习(2019)vue之电商管理系统电商系统处理attr参数
  6. 数据结构实验之栈六:下一较大值(二)
  7. python字典程序题_急!一道关于python字典的编程题!求思路!
  8. 仿ios桌面vivo_vivo全新OriginOS细节曝光:系统UI大变样
  9. 下行文格式图片_收藏!公文写作格式大全(附示例图)
  10. JavaScript字符串替换replace方法
  11. 冷美人为什么“冷”?
  12. 简单的背包问题(c语言)
  13. 我的世界php motd,我的世界motd标语编辑器
  14. 群晖NAS、硬盘及路由器选购及组网,打造家庭资源共享环境
  15. 坚持写博客对我们有什么好处
  16. 标准盒模型和怪异盒模型的区别
  17. widows计算器恢复
  18. BUAA(2021春)查家谱(士谔书院16级期末)——找最近公共祖先(已上传测试数据和代码)
  19. jvm 调优实战经验(结合jstat、jstack、procexp)
  20. 什么是值传递,什么是引用传递。为什么说Java中只有值传递。

热门文章

  1. 【迫零准则】基于迫零准则的自适应线性均衡器的MATLAB仿真
  2. linux写时复制技术初探
  3. Oracle 12c 安装(内附软件包)
  4. ES6之---读懂let才能少踩坑
  5. mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)...
  6. 《HTML5 canvas开发详解(第2版)》——1.3 本书使用的基础HTML页面
  7. 嵌入式linux开发环境搭建——VirtualBox虚拟机网络环境解析
  8. 周永亮 《我是职业人》
  9. forum tribune
  10. python批量给文件命名为001,002,...【亲测有效】