参考: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. (转)winform之ListView

    一.ListView类 1.常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. (2)GridLines:设置 ...

  2. hdu-6194 string string string 后缀数组 出现恰好K次的串的数量

    最少出现K次我们可以用Height数组的lcp来得出,而恰好出现K次,我们只要除去最少出现K+1次的lcp即可. #include <cstdio> #include <cstrin ...

  3. android-------Android Studio使用MAT分析工具遇到的错误

    今天主要介绍一下我使用MAT工具分析文件时遇到的一个错误 Error opening heap dump 'a.hprof'. Check the error log for further deta ...

  4. Confluence 6 为一个空间应用一个主题

    主题允许你对 Confluence 的外表和显示进行自定义.你的 Confluence 空间管理员可以到 The Atlassian Marketplace 上下载主题. 一旦一个主题被安装到 Con ...

  5. 小程序分享转发功能实现demo

    /** * 用户点击右上角分享 */ onShareAppMessage: function() { //分享 console.log("分享") var that = this ...

  6. jquery中的全选、反选、全不选和单删、批删

    HTML页面 <!doctype html><html lang="en"><head> <meta charset="UTF- ...

  7. CentOS6.8单用户模式下修改密码

    CentOS6.8单用户模式下修改密码 1. 选择进入菜单menu界面,在开启系统出现如下界面时,按Esc键(只需按一下) 2. 然后进入到如下界面 3. 上图中红色矩形类的内容,按“a”键可以修改内 ...

  8. Bipartite Segments CodeForces - 901C (区间二分图计数)

    大意: 给定无向图, 无偶环, 每次询问求[l,r]区间内, 有多少子区间是二分图. 无偶环等价于奇环仙人掌森林, 可以直接tarjan求出所有环, 然后就可以预处理出每个点为右端点时的答案. 这样的 ...

  9. seaweedFS

    那首先我们来分析一下seaweedfs是什么?seaweedfs是一个非常优秀的由 golang 开发的分布式存储开源项目.它是用来存储文件的系统,并且与使用的语言无关,使得文件储存在云端变得非常方便 ...

  10. 原生JS的地区二级联动,很好理解的逻辑

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...