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

8.1 C++输入输出类的层次的更多相关文章

  1. Swing学习笔记1-----Swing组件类的层次

    1.  从结构上划分 Swing 组件类分为两种,一种是JComponent类,一种是Windows类.其中windows类包含的是一些可以独立显示的组件,而JComponent类包含的是不可以独立显 ...

  2. 【Java】异常类处理层次

    异常处理简介 异常在java的开发中可能没有那么被重视.一般遇到异常,直接上抛,或者随便catch一下处理之后对于程序整体运行也没有什么大的影响.不过在企业级设计开发中,异常的设计与处理的好坏,往往就 ...

  3. UIKit框架类层次图

    学习UIKit应该首选了解UIKit类的层次图,从根类一层一层的拨.

  4. Java类载入器(一)——类载入器层次与模型

    类载入器   虚拟机设计团队把类载入阶段中的"通过一个类的全限定名来获取描写叙述此类的二进制字节流"这个动作放到Java虚拟机外部去实现.以便让应用程序自己决定怎样去获取所须要的类 ...

  5. Java_IO流输入输出

    第三章 输入输出 一.I/O Input/Output 二.File 用途:对文件和目录进行常规操作(除文件读写操作外). 方法:exists():判断文件或目录是否存在 isFile():判断是否是 ...

  6. Python笔记(4)类__属性与描述符

    部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ...

  7. 【PHP面向对象(OOP)编程入门教程】11.类的继承

    继承作为面向对象的三个重要特性的一个方面,在面向对象的领域有着及其重要的作用,好像没听说哪个面向对象的语言不支持继承. 继承是PHP5面象对象程序设计的重要特性之一,它是指建立一个新的派生类,从一个或 ...

  8. 类图和对象图教程-类(Class)、接口(Interface)、协作(collaboration)、依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)以及实现关系(Realization)

    类图的概念 (转) 一.概述 类图(Class Diagram)是描述类.接口.协作以及它们之间关系的图,用来显示系统中各个类的静态结构.类图是定义其他图的基础,在类图基础上,可以使用状态图.协作图. ...

  9. C++标准库异常类

    C++标准库异常类 2012-12-24 16:27 5269人阅读 评论(1) 收藏 举报  分类: c/c++(36)  C++标准库异常类继承层次中的根类为exception,其定义在excep ...

随机推荐

  1. English trip EM2-PE-1B Teacher:Patirck

    PE = 演讲课 课上内容(Lesson) How are you today?  你今天怎么样? What is your name?  你的名字叫什么? What do you come from ...

  2. LeetCode--383--赎金信

    问题描述: 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成.如果可以构成,返回 true ...

  3. 20190104xlVBA_在课表里标记自己的课程

    Sub TagMyCourses() Const HEAD_ROW = 3 With ActiveSheet endrow = .Cells.Find("*", .Cells(1, ...

  4. ActiveSupport::Concern 和 gem 'name_of_person'(300✨) 的内部运行机制分析

    理解ActiveRecord::Concern: 参考:include和extend的区别: https://www.cnblogs.com/chentianwei/p/9408963.html 传统 ...

  5. usaco Transformations

    模拟就行.注意int arr[][]二维数组在定义时是二维数组,而函数传参时是指针.这意味着memset()的不同.传参时只能当作一维逐个memset. #include <iostream&g ...

  6. Web版记账本开发记录(一)

    //index.js var util = require("../../utils/util.js"); //获取应用实例 var app = getApp(); Page({ ...

  7. android -------- ConstraintLayout介绍 (一)

    ConstraintLayout 翻译为 约束布局,也有人把它称作 增强型的相对布局,由 2016 年 Google I/O 推出. 扁平式的布局方式,无任何嵌套,减少布局的层级,优化渲染性能.从支持 ...

  8. ADG配置(主备库环境)

    @font-face { font-family: "Courier New"; }@font-face { font-family: "宋体"; }@font ...

  9. ABAP游标

    DATA: BEGIN OF count_line, carrid TYPE spfli-carrid, count TYPE i, END OF count_line, spfli_tab TYPE ...

  10. MongoDB的管理

    1. 启动和停止MongoDB: 2. 访问控制: 3. 命令行操作: 4. 进程控制: 5. MongoDB的监控: 6. MongoDB数据的导入.导出: 7. MongoDB备份.还原. Mon ...