本章主要讲解了IO标准库的基础知识。
下面是本章的内容图:简单的iostream继承层次
Details of knowledge
1.基类:C++中的父类就是基类
2.派生类:C++中继承(inheritance)而来的类称为派生类
3.输出缓冲区的4种刷新方式
cout<<flush ; // 将显存的内容立即输出到显示器上进行显示。
cout<<endl ; // endl控制符的作用是将光标移动到输出设备中下一行开头处,并且清空缓冲区
相当于,
cout<<"\n"<<flush
cout<<ends;//这个操作符在缓冲区总加入空字符然后刷新它。
cout<<unitbuf<<"first"<<"second"<<nounitbuf;
等价于cout<<"first"<<flush<<"second"<<flush;
其中nounitbuf操纵符将流恢复为使用正常的、由系统管理的缓冲区刷新方式。
Questionable Examples
Concrete Explanation
1.条件状态
IO标准库管理一系列条件状态成员,用来标记给定的IO对象是否处于可用状态,或者碰到了哪种特定的信息。
<span style="white-space:pre"> </span>strm::iostate // 机器相关的整型名,由各个iostream类定义,用于定义条件状态
<span style="white-space:pre"> </span>strm::badbit // strm::iostate类型的值,用于指出被破坏的流,是系统级故障,无法修复
<span style="white-space:pre"> </span>strm::failbit // strm::iostate类型的值,用于指出失败的IO操作
<span style="white-space:pre"> </span>strm::eofbit // strm::iostate类型的值,用于指出流已经到达文件结束符
<span style="white-space:pre"> </span>s.eof() // 如果设置了流s的eofbit值,则该函数返回true
<span style="white-space:pre"> </span>s.fail() // 如果设置了流s的failbit值,则该函数返回true
<span style="white-space:pre"> </span>s.bad() // 如果设置了流s的badbit值,则该函数返回true
<span style="white-space:pre"> </span>s.good() // 如果流s处于有效状态,则该函数返回true
<span style="white-space:pre"> </span>s.clear() // 将流s中的所有状态值都重设为有效状态
<span style="white-space:pre"> </span>s.clear(flag) // 将流s中的某个指定条件状态设置为有效。flag的类型是strm::iostate
<span style="white-space:pre"> </span>s.setstate(flag) // 给流s添加指定条件。flag的类型是strm::iostate
<span style="white-space:pre"> </span>s.rdstate() // 返回流s的当前条件,返回值类型为strm::iostate
使用实例:
#include<iostream>
using namespace std;
int main()
{
iostream::iostate old_state = cin.rdstate(); // 得到cin对象的原始状态值
cout << old_state << endl; //输出 0 cin的状态值是iostream::good
int i;
cin >> i; //输入一个整数,如123
cout << cin.rdstate() << endl; //输出0 因为123被正确转成int并被存入i 所以cin的状态置为iostream::good
cout << cin.good() << cin.eof() << cin.fail() << cin.bad() << endl; // 输出1000
cin >> i; //输入非整数,如一个字符串abd
cout << cin.rdstate() << endl; //输出4 因为abc无法转成int存入i 所以cin的状态置为iostream::failbit
cout << cin.good() << cin.eof() << cin.fail() << cin.bad() << endl; // 输出0010
cin.clear(); // 重置cin状态为std::iostream::good 否则下面的cin>>i不会执行,直接之后后面的两句。
cin >> i; //再输入一个整数,如568
cout << cin.rdstate() << endl; //输出0 因为568被正确转成int并被存入i 所以cin的状态置为iostream::good
cout << cin.good() << cin.eof() << cin.fail() << cin.bad() << endl; // 输出1000
return 0;
}
2.tie函数
将输入流和输出流绑定在一起。当输入流和输出流绑定在一起时,任何读输入流的尝试都将首先刷新起关联的缓冲区。
在标准库中默认cin和cout绑定在一起,即当cin时,cout缓冲区被刷新。
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
//创建文件file.out并打开
ofstream fout("file.out");
//将输出流对象fout和输入cin关联起来
cin.tie(&fout);//必须要使用引用,否则传进tie函数的只是fout的副本
//向test.txt文件中写入字符串abc
fout<<"abc";
int i;
// 执行输入语句时会立刻刷新关联的输出流,字符串被写到文件中,而不必等程序结束
cin>>i;
return 0;
}
3.文件输入输出流
http://blog.csdn.net/u013637931/article/details/45155655
4.字符串输入输出流