C++流类库
流类库
c++语言中为不同类型数据的标准输入和输出定义了专门的类型,类库中主要有ios、istream、ostream、iostream、ifstream、ofstream、fstream、istrstream、ostrstream和strstream等类。
ios为根基类,它直接派生4个类,输入流类istream、输出流类ostream、文件流基类fstreambase和字符串流基类strstreambase。
输入文件流类ifstream同时继承了输入流类和文件流基类。
输出文件流类ofstream同时继承了输出流类和文件流基类。
输入字符串流类istrstream同时继承了输入流类和字符串流基类。
输出字符串流类ostrstream同时继承了输出流类和字符串流基类。
输入/输出流类iostream同时继承了输入流类和输出流类。
输入/输出文件流类fstream同时继承了输入/输出流类和文件流基类。
输入/输出字符串流类strstream同时继承了输入/输出流类和字符串流基类。
类库关系图如图所示:
声明:
关于流类库的概念知识总结于清华大学出版社c++教材。
类库关系图是我自己用wps画的,因为教程书上的关系图错了,借用时注意版权问题。
流类库的使用
c++系统中的I/O标准类,都定义在iostream.h、fstream.h和strstream.h这3个头文件中,各头文件包含的类如下:
进行标准I/O操作时使用iostream.h头文件,它包含ios、iostream、istream和ostream等类。
进行文件I/O操作时使用fstream.h头文件,它包含fstream、ifstream、ofstream和fstreambase等类。
进行字符串I/O操作时使用fstream.h头文件,它包含strstream、istrstream、ostrstream、strstreambase和iostream等类。
要进行什么样的操作,只需要引入头文件即可。
某些编译器可能识别不了这种头文件,比如dev c++,可以把后缀.h去掉。
流的输入输出
下面以流的输出做一个示范。
源代码:
#include<iostream>
#include<strstream> //字符串流头文件
using namespace std;
int main(){
char c[]="123456"; //定义字符串
istrstream s1(c); //定义字符串输入流s1,将字符串c注入s1
cout<<s1<<endl;;
int i;
s1>>i; //将s1流注入int型i,将字符串转换为整型数字
cout<<i<<endl;
istrstream s2(c,3); //定义字符串输入流s2,将字符串c的前3位注入s1
int j;
s2>>j; //将s2流注入int型j,将字符串转换为整型数字
cout<<j<<endl;
cout<<i+j<<endl;
return 0;
}
结果图:
需要注意的是,单纯地输出流对象是错误地,必须将流注入某个对象才可。