本篇文章系统地介绍一下标准I/O流、文件I/O流和字符串I/O流的基本概念和使用方法,都是基础的理论,比较枯燥。所以我多用图表的方式列出来,希望可以对C++流的概念有一个基本的认识。
I/O是计算机的一个重要组成部分,是人机交互的主要方式。在C++中,数据的输入和输出包括对标准输入输出设备(键鼠和显示器)、对外存磁盘上的文件和对内存中制定的字符创存储空间进行输入输出这三个方面。我们简称为标准I/O、文件I/O和串I/O。
以下就针对这三个方面分别介绍:
首先下图给出了C++所有的I/O类的继承关系图。(UML的线条有点乱,看起来有点绕哈,不过根据类名应该可以看出是谁继承谁哈。)
从图中可以看出,所有的流类都是由根基类ios
派生而来。C++流是指信息从外部通过输入设备流入计算机内部(内存),以及从内部(内存)流向外部设备。为了实现信息的这种流动,C++系统定义了I/O类库,其中每一个类都被称作流或流类,用以支持某一种信息的流动功能。
以上的流程就是流类的使用该方法,通过实例化一个流类,并与磁盘上的文件(也可以是输入输出设备或内存)关联,那么对这个流对象的操作就等同于对文件(也可以是输入输出设备或内存)的输入输出操作。我们熟悉的cin、cout、cerr、clog
就是编译器为我们实例化的标准I/O操作,方便了用户操作。
iostream中两个重要的运算符重载函数:
istream& operator>>(简单类型标识符&);
ostream& operator<<(简单类型标识符 );
其中的简单类型标识符可以是:char、int、long、float、double、char*
等之中的任何一种,对于每一种类型都有一个右移运算法重载函数,当系统执行任何一种cin>>x
的时候,将根据实参x的类型调用相应的提取运算符重载函数,把x传送给对应的引用形参,接着从键盘的输入缓冲区读入一个值并赋给x,后返回cin流。同理,cout<<x
就是把表达式的值输出到显示器上。