前言
在程序经常实现数据的输入和输出,c++通过一种称为流(stream)的机制提供了更为精良的输入和输出方法。流是一种灵活且面向对象的I/o方法。
根据操作对象不同分为文件流、字符串流、控制台流。
控制台流
我们所熟悉的输入输出操作分别是由istream(输入流)和ostream(输出流)这两个类提供的,为了允许双向的输入/输出,由istream和ostream派生出了iostream类。
类的继承关系如下图:
是一种多继承的关系,在程序应用可以只包含头文件iostream。
函数 | 功能 | 应用 | 操作符 |
---|---|---|---|
cin | 输入(standard input)的istream类对象 | 从设备读入数据 |
> |
cout | 输出(standard output)的ostream类对象 | 向设备输出或者写数据 | << |
cerr | 标准错误(standard error)的ostream类对象 | 屏幕设备写数据 | << |
上面的<<和>>操作符,是因为iostream.h头文件中,ostream类对应每个基本数据类型都有其友元函数对左移操作符进行了友元函数的重载。
文件流
文件流的输入输出类在fstream头文件被定义,和上面继承关系为:
由于文件设备不像显示器屏幕和键盘那样标准的默认设备,所以我们定义一个流对象。
ofstream类的默认构造函数原形为:
ofstream::ofstream(constchar *filename,int mode = ios::out, int penprot = filebuf::openprot);
参数 | 值来源 |
---|---|
filename | 打开的文件名 |
mode | 打开文件的模式(ios:out) |
prot | 打开文件属性(filebuf::openprot) |
- mode属性表
类型 | 解释 |
---|---|
ios::app | 追加方式打开文件 |
ios::ate | 文件打开后定位到文件尾,app就包含有此属性 |
ios::binary | 以二进制方式打开文件,缺省的方式是文本方式 |
ios::in | 文件以输入方式打开 (ifstream) |
ios::out | 文件以输出方式打开 (ofstream) |
ios::nocreate | 不建立文件,所以文件不存在时打开失败 |
ios::noreplace | 不覆盖文件,打开文件时如果文件存在失败 |
- 打开文件属性值
类型 | 解释 |
---|---|
0 | 普通文件,打开访问 |
1 | 只读文件 |
2 | 隐含文件 |
4 | 系统文件 |
“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。 文件使用完后可以使用close成员函数关闭文件。
ios::app为追加模式,在使用追加模式的时候同时进行文件状态的判断是一个比较好的习惯。
字符串流
理解就是能够控制字符串类型对象进行输入输出的类,C++不光可以支持C++风格的字符串流控制,还可以支持C风格的字符串流控制。
继承关系如下图:
类 | 作用 |
---|---|
istrstream | C风格的串流的输入操作,字符串数组作为输入。 |
ostrstream | C风格的串流的输出操作,字符串数组作为输出。 |
strstream | 支持C风格的串流的输入输出操作。 |