【重学《C++Primer第四版》】第八章、标准IO库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013637931/article/details/45154583

本章主要讲解了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.字符串输入输出流


展开阅读全文

没有更多推荐了,返回首页