8.1 面向对象的io库
1) 组成:
对应的宽字符的流类型就是在前面加了一个w例如:
wistream
wostream
wcout
wcin
…..
2) 继承关系
3) io对象不可以复制或复制
1. 因此不能存储在vector 等容器内
2. 当然也不可以作为形参或返回类型,如果用作参数,必须是引用类型.对流的操作总会涉及到改变,所以不要用const类型
8.2 条件状态
1)
标准库定义的状态标记
strm::iostate
2)
状态标记的取值
strm::badbit //被破坏的流,系统级错误
strm::failbit //失败的io操作
strm::eofbit //流已经达到文件的结束符
3)
查询状态的函数
eof(); //如果strm::eofbit 被设置,返回true
fail(); //如果
strm::failbit 被设置,返回true
good(); //如果流处于有效状态 返回true
bad(); //如果
strm::badbit 被设置,返回 true
4)
设置状态的函数
clear(); //使流中所有状态都重设为有效,说白了就是清除错误状态
clear(flag); //清除指定错误状态
setsate(flag); //给strm::iostate
添加指定的状态
5)
返回现在状态
rdstate();
8.3 输出缓冲区的管理
1) 刷新缓冲区
endl;//输出一个 ‘/n’ 再刷新
ends;//输出一个 ‘/0’ 再刷新
flush;//直接刷新
2) 如果要刷新所有的输出可以用unitbuf操纵符
cout << unituf <<” … ”;//等价于 cout
<< unituf <<” … ”<<flush;
3) 绑定
任何读入输入流的尝试都将首先刷新其对应的输出缓冲
cin.tie(&cout);//绑定
cin.tie(0);//取消绑定
ostream *oldTie = cin.tie();//保存绑定对象
8.4 文件的输入和输出
1) 类型
ifstream 读文件
ofstream 写文件
fstream 可读可写
2) 打开文件
istream infile(iffile.c_str());
infile.open(“in”);
if(!infile)
//open
error;
3) 关联不同文件
infile.close();
infile.open(“out”);
4) 清除状态
当文件流出现了什么非正常状态(包括eofbit )的时候需要clear() 否则不能继续读取
4) 文件模式
ostream : out(写) trunc(清空已经存在的文件流) app
istream :
ate(定位在文件尾) binary in(读)
例子:
Ifstream &openfile(ifstream& in
,const string &filename)
{
in.close();
in.clear();
in.open(filename.c_str());
return
in;
}
8.5 字符串流
例子:
string line,word;
while(getline(cin,line))
{
istringstream
stream(line);
while(stream>>word){}
}
1)
特定函数
strm.str();//返回string
strm.str(s);//将string 复制给s
2)
使用
用来转换输入输出格式是不错的类似于c风格的 sprintf的功能