C++中的标准IO库详解
2016-03-21 11:09
387 查看
<分析>:
(1)IO类之间的继承关系图如下:
![](http://img.blog.csdn.net/20160321110438044?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(2)IO类型有三个独立的头文件,iostream头文件定义了控制窗口的类型,fstream头文件定义了读写已命名文件的类型,sstream头文件定义的类型则用于读写存储在内存中的string对象;
(3)对IO对象使用继承有个重要的含义:如果函数有基类类型的引用形参时,可以给函数传递其派生类型的对象;
(4)为了支持国际字符wchar_t类型的读写,在每个IO类前面加上w与读写char类型的IO类型分开来,于是就变成wiostream,wfstream,wstringstream等类来读取wchar_t类型;
(5)标准库类型的对象不容许进行复制或者赋值操作,所以不能存储容器中,函数的形参和返回类型也不能为流类型,如果需要传递或者返回IO对象,必须传递或者返回该对象的指针或引用,因为读写要改变io的状态,所以引用或者指针必须为非const的。
(6)fstream类型继承了iostream类型,另外还定义了两个新操作--open和close,以及形参为要打开的文件名的构造函数,该构造函数的形参为c风格的字符串,所以当文件名是string对象时,需要用c_str成员函数获取c风格字符串,例如:
string ifile(“moring”);--文件名存在string对象中;
ifstream infile(ifile.c_str());--形参为c风格字符串的构造函数;
(7)fstream中open函数将已经存在的fstream对象与特定文件绑定:
ifstream infile;
infile.open(“moring”);--与(6)中的操作结果一样;
(8)如果希望fstream对象与另一个不同的文件相关联,必须先关闭(close)现在的文件,然后再打开(open)另一个文件:
infile.close();
infile.open(“next”);
(9)打开已经打开的流对象会发生错误,必须用clear进行清除;
(10)关闭流并不能改变流的内部状态,直到执行clear操作重新回复流的状态为止,如果打算重新用已存在的流对象,必须调用close操作进行关闭和调用clear操作进行清空。
(11)模式是文件的属性而不是流的属性,以下为所有文件模式的含义:
1)out/trunk/app模式只能用于指定的ofstream和fstream对象关联的文件;in对象只能用于指定与iftream和 fstream对象关联的文件;所有文件都可以使用ate/binary;
2)ate只在打开时有效,定位到文件尾;
3)以binary打开的文件以字节系列的形式处理,不解释其中的字符;
4)默认情况下,ifstream以in模式打开,ofstream则以out模式打开,该文件会被清空,fstream以in和out模 式打开,不进行清空;
5)对于ofstream打开的文件,要保存其中的数据,必须显式指定app模式打开;
6)fstream若只指定out模式打开,不使用in模式,文件会被清空;如果以trunk模式打开,不管是否使用in模 式,文件都会被清空;
(12)stringstream继承了iostream类型,同时定义了一个string类型的构造函数,还定义了一个str的成员,用于读取或者设置对象的string值,无参数的str函数将返回stringstream对象所关联的string对象,有参数的str函数将该stringstream对象与实参相关联,使用这个类要包含头文件<sstream>。
(13)stringstream对象不能使用open与close函数;
(14)stringstream提供了转换和格式化,可以将其中string中的内容转换为int等类型的数值,也可以将int类型的数值转换为string对象中,在写入stringstream对象时,一般要在相邻不同类型之间加上空白字符,这样方便将其还原到对应类型的变量中,例如:
int val1=512,val2=1024;
ostringstream format_message;
format_message<<”val1:”<<val1<<”\n”<<”val2:”<<val2<<”\n”;
//获取format_message中存储的string,然后建立istringstream对象:
istringstream input_istring(format_message.str());
//还原val1,val2,同时在读取的时候忽略空白字符
string dump;
input_istring>>dump>>val1>>dump>>val2;
(15)stringstream可以用于不同类型之间的转换,比如将只有含有数字的字符串读入ostringstream对象,然后将其在读写到int类型的变量,便实现字符串到int型的转换;
(1)IO类之间的继承关系图如下:
(2)IO类型有三个独立的头文件,iostream头文件定义了控制窗口的类型,fstream头文件定义了读写已命名文件的类型,sstream头文件定义的类型则用于读写存储在内存中的string对象;
(3)对IO对象使用继承有个重要的含义:如果函数有基类类型的引用形参时,可以给函数传递其派生类型的对象;
(4)为了支持国际字符wchar_t类型的读写,在每个IO类前面加上w与读写char类型的IO类型分开来,于是就变成wiostream,wfstream,wstringstream等类来读取wchar_t类型;
(5)标准库类型的对象不容许进行复制或者赋值操作,所以不能存储容器中,函数的形参和返回类型也不能为流类型,如果需要传递或者返回IO对象,必须传递或者返回该对象的指针或引用,因为读写要改变io的状态,所以引用或者指针必须为非const的。
(6)fstream类型继承了iostream类型,另外还定义了两个新操作--open和close,以及形参为要打开的文件名的构造函数,该构造函数的形参为c风格的字符串,所以当文件名是string对象时,需要用c_str成员函数获取c风格字符串,例如:
string ifile(“moring”);--文件名存在string对象中;
ifstream infile(ifile.c_str());--形参为c风格字符串的构造函数;
(7)fstream中open函数将已经存在的fstream对象与特定文件绑定:
ifstream infile;
infile.open(“moring”);--与(6)中的操作结果一样;
(8)如果希望fstream对象与另一个不同的文件相关联,必须先关闭(close)现在的文件,然后再打开(open)另一个文件:
infile.close();
infile.open(“next”);
(9)打开已经打开的流对象会发生错误,必须用clear进行清除;
(10)关闭流并不能改变流的内部状态,直到执行clear操作重新回复流的状态为止,如果打算重新用已存在的流对象,必须调用close操作进行关闭和调用clear操作进行清空。
(11)模式是文件的属性而不是流的属性,以下为所有文件模式的含义:
in | 打开文件做读操作 |
out | 打开文件做写操作 |
app | 每次在写之前找到文件尾 |
ate | 打开文件后立即将文件定位到文件尾 |
trunk | 打开文件时清空已存在的文件流 |
binary | 已二进制的模式进行IO操作 |
2)ate只在打开时有效,定位到文件尾;
3)以binary打开的文件以字节系列的形式处理,不解释其中的字符;
4)默认情况下,ifstream以in模式打开,ofstream则以out模式打开,该文件会被清空,fstream以in和out模 式打开,不进行清空;
5)对于ofstream打开的文件,要保存其中的数据,必须显式指定app模式打开;
6)fstream若只指定out模式打开,不使用in模式,文件会被清空;如果以trunk模式打开,不管是否使用in模 式,文件都会被清空;
(12)stringstream继承了iostream类型,同时定义了一个string类型的构造函数,还定义了一个str的成员,用于读取或者设置对象的string值,无参数的str函数将返回stringstream对象所关联的string对象,有参数的str函数将该stringstream对象与实参相关联,使用这个类要包含头文件<sstream>。
(13)stringstream对象不能使用open与close函数;
(14)stringstream提供了转换和格式化,可以将其中string中的内容转换为int等类型的数值,也可以将int类型的数值转换为string对象中,在写入stringstream对象时,一般要在相邻不同类型之间加上空白字符,这样方便将其还原到对应类型的变量中,例如:
int val1=512,val2=1024;
ostringstream format_message;
format_message<<”val1:”<<val1<<”\n”<<”val2:”<<val2<<”\n”;
//获取format_message中存储的string,然后建立istringstream对象:
istringstream input_istring(format_message.str());
//还原val1,val2,同时在读取的时候忽略空白字符
string dump;
input_istring>>dump>>val1>>dump>>val2;
(15)stringstream可以用于不同类型之间的转换,比如将只有含有数字的字符串读入ostringstream对象,然后将其在读写到int类型的变量,便实现字符串到int型的转换;
相关文章推荐
- 2016第七届蓝桥杯 C/C++省赛第9题 交换瓶子
- C语言实现单链表
- boost类库实现普通C++类的迭代
- C++中各种类型的成员变量的初始化方法(mark-好)
- 数据类型汇总(java、php、C++)
- 【C++】定义全局常量的一个优雅的方案
- zy-c++ string 学习小结
- C++中delete和delete[]的区别
- (C++)inline关键字
- (C\C++)inline关键字
- 第七届蓝桥杯C/C++ A组 省赛
- c++类型转换
- C++ 操作防火墙
- 学习C++, 50条重要的学习建议
- [C/C++11语法]_[初级]_[lamba 表达式介绍]
- [C/C++11语法]_[初级]_[lamba 表达式介绍]
- C++中文件的读写
- C++中文件的读写
- C++ map的基本操作
- c++子类和父类成员函数重名