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则主要是用于格式化输入输出。
8.1 C++输入输出类的层次的更多相关文章
- Swing学习笔记1-----Swing组件类的层次
1. 从结构上划分 Swing 组件类分为两种,一种是JComponent类,一种是Windows类.其中windows类包含的是一些可以独立显示的组件,而JComponent类包含的是不可以独立显 ...
- 【Java】异常类处理层次
异常处理简介 异常在java的开发中可能没有那么被重视.一般遇到异常,直接上抛,或者随便catch一下处理之后对于程序整体运行也没有什么大的影响.不过在企业级设计开发中,异常的设计与处理的好坏,往往就 ...
- UIKit框架类层次图
学习UIKit应该首选了解UIKit类的层次图,从根类一层一层的拨.
- Java类载入器(一)——类载入器层次与模型
类载入器 虚拟机设计团队把类载入阶段中的"通过一个类的全限定名来获取描写叙述此类的二进制字节流"这个动作放到Java虚拟机外部去实现.以便让应用程序自己决定怎样去获取所须要的类 ...
- Java_IO流输入输出
第三章 输入输出 一.I/O Input/Output 二.File 用途:对文件和目录进行常规操作(除文件读写操作外). 方法:exists():判断文件或目录是否存在 isFile():判断是否是 ...
- Python笔记(4)类__属性与描述符
部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ...
- 【PHP面向对象(OOP)编程入门教程】11.类的继承
继承作为面向对象的三个重要特性的一个方面,在面向对象的领域有着及其重要的作用,好像没听说哪个面向对象的语言不支持继承. 继承是PHP5面象对象程序设计的重要特性之一,它是指建立一个新的派生类,从一个或 ...
- 类图和对象图教程-类(Class)、接口(Interface)、协作(collaboration)、依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)以及实现关系(Realization)
类图的概念 (转) 一.概述 类图(Class Diagram)是描述类.接口.协作以及它们之间关系的图,用来显示系统中各个类的静态结构.类图是定义其他图的基础,在类图基础上,可以使用状态图.协作图. ...
- C++标准库异常类
C++标准库异常类 2012-12-24 16:27 5269人阅读 评论(1) 收藏 举报 分类: c/c++(36) C++标准库异常类继承层次中的根类为exception,其定义在excep ...
随机推荐
- 中文情况下,Eclipse的最好字体。
个人喜欢的是 Microsoft YaHei Mono 了. 下面的文章喜欢的是 YaHei Consolas Hybrid. 字体安装方法的话,拷贝到 widnows\fonts目录就行. http ...
- gitignore有时候为啥过滤不了文件或目录
一.问题介绍 使用Git过程中,有时候我们想过滤项目中的部分文件,在.gitignore中加入该文件名称或该文件所在目录的名称,比如我们的项目日志文件(.log文件) 但是有时候发现不管用.不好使. ...
- LeetCode--014--最长公共前缀(java)
编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...
- Django 权限管理(二)
权限菜单展示 1.展示的效果 实现该效果,涉及到的核心点(突破点) 1. 权限分类: (1)菜单权限 (主要用来展示的权限(url)如查看权限 url, 如上图中的每个权限都归类为菜单权限,主要用来 ...
- MySQL 8.0窗口函数
团队介绍 网易乐得DBA组,负责网易乐得电商.网易邮箱.网易技术部数据库日常运维,负责数据库私有云平台的开发和维护,负责数据库及数据库中间件Cetus的开发和测试等等. 一.窗口函数的使用场景 作为I ...
- Leetcode 144
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...
- Analytic Functions in Oracle
Contents Overview and IntroductionHow Analytic Functions WorkThe SyntaxExamplesCalculate a running T ...
- Tomcat和JDK版本的对应关系
当我们在谈论Tomcat与JDK版本的对应关系的时候,我们实际上在讨论两个问题. 第一个是,我们想安装了某个版本的Tomcat(比如Tomcat7),需要安装哪个版本的JDK,才能把Tomcat运行起 ...
- 我个人对OOP的理解
OOP面向对象的思维:pay1:封装 A.避免使用非法数据赋值 B.保证数据的完整性 C.避免类内部发生修改的时候,导致整个程序的修改 pay2:继承 A.继承模拟了现实世界的关系,OOP中强调一切皆 ...
- 外部调用mvc的api方法时,如何解决跨域请求问题?
首先,创建一个mvc项目(包含webapi),我们模拟一个场景 1)在项目的Controller 创建一个WeiXinApiController public class WeiXinApiContr ...