前言
关于流本质的问题,其实从我刚开始学习C++的时候,就已经存在了。当时找了不少的资料,不过一直处于那种知其然而不知其所以然的状态,关于流的本质问题我还是一直没有搞通,始终就是懵懵懂懂的。
不过在今天,我在一时兴起又在查阅流相关资料的时候,突然发现我貌似能够理解了它,因此用此篇博客来记录一下。
有一点需要事先声明一下,以下的内容,皆是我自己的理解,由于个人知识积累及阅历的原因,可能会存在一些不足,如果发现有错误,还请读者予以斧正。
我理解的“流”
先说一下我对于流的理解:
流的本质是一种对象。
流是介于数据和程序之间的一个中转设备。
因为流的存在,使得我们可以不需要直接操作数据,而是通过操作流的方式间接对数据进行操作。
使用“流”的优势
这种方式的好处是什么呢?
统一操作标准。
无论对于何种数据,以及数据的类型如何,只要将这个数据和流关联起来,那么我们就可以不用考虑数据到底是如何存储的,只需要按照流的操作标准来进行操作即可,这就是统一了操作标准。
上面说到,流的本质是一个对象,因此对于流而言,存在着许多的方法,这些方法为我们操作数据提供了统一的接口,对我们甚至可以做到在不更改代码的前提下,操作不同的数据。
C++中“流”的分类
以我目前所接触到的内容而言,C++中流主要分为三类:
- . IO流: 输入输出流,iostream
- . 文件流: 对于文件的操作,fstream
- . 字符串流: 主要实现对于字符串的操作,stringstream
这三者在本质上还是一样的,都是抽象出方法,只不过操作的对象不同罢了。
以下贴出这几个类之间的关系图:
由上图可见,为什么说可以像使用cin/cout的方式去使用fstream,因为fstream本身是继承自iostream的。
因为这里面主要介绍的是思想,因此对于这三种流的具体操作,这里就不展开进行叙述了,如果有需要,还请自行查阅相关资料。