您的位置:首页 > 编程语言 > C语言/C++

C++中的标准IO库详解

2016-03-21 11:09 387 查看
<分析>:

(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操作
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型的转换;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: