第八章 IO库
1.iostream 定义了用于读写流的基本对象;fstream定义了读写命名文件的类型;sstream定义了读写内存string对象的类型。
2.头文件 iostream 类型: istream 从流读取数据 ostream 从流写入数据 iostream读写流
头文件 fstream 类型: ifstream 从文件读取数据 ofstream 向文件写入数据 fstream 读写文件
头文件 sstream 类型: istringstream 从string读取数据 ostringstream 向string写入数据 stringstream 读写string
在类型前面加上w则支持使用宽字符。
3.简单来说,继承机制使我们可以声明一个特定的类继承自另一个类。通常可以将一个派生类(继承类)对象当做其基类(所继承的类)对象来使用。
类型ifstream 和 istringstream都继承自istream,类似的ofstream和ostringstream都继承自ostream。
4. 进行IO操作的函数通常以引用方式传递和返回流。读写一个IO对象对改变其状态,因此传递和返回的引用不能是const的。
5. 由于IO操作一个不可避免的问题就是可能发生错误,因此代码通常应该在使用一个流之前检查它是否处于良好状态,用简单的while(cin>>word)来实现。
6. 缓冲刷新—数据真正写到输出设备或文件的情况:
(1)程序正常结束,比如main()函数的return语句;
(2)缓冲区慢时,需要刷新缓冲,而后新的数据才能被写入到缓冲区;
(3)使用操作符如endl来显式刷新缓冲区(完成一个换行之后刷新),使用flush(直接刷新),使用ends(输出一个空字符后刷新);
(4)使用操作符unitbuf来清空缓冲区,之后所有输出操作都会立即刷新缓冲区。
(5)一个输出流可能被关联到另一个流,在此情况下,当读写被关联的流时,关联到的流的缓冲区会被刷新。默认情况下,cin和cerr关联到cout。
7. c++的tie函数。
8. 当我们想要读写一个文件时,可以定义一个文件流对象,并将对象与文件关联起来。
有3种方法: 显然第三种方便。
(1)string name("readme.txt"); ifstream in(name);
(2)string name("readme"); ifstream in(name+".txt");
(3)ifstream in("readme.txt");
或者定义一个空文件流对象,可以使用open来关联:
ifstream in; in.open("readme.txt") ; // open里面的方法也是上面的三种。 ofstream对文件进行写操作用法类似。
如(5)所述,检查流是否成功是一个习惯: if(in) ........
文件操作完成后使用关闭来解除绑定 in.close(); 内无参数。 要想将文件流关联到另一个文件,必须在解除绑定后重新open。
9. 每个文件流都有一个关联的文件模式,比如上面ifstream in("readme.txt") 默认以读方式打开,即ifstream in("readme.txt",in); ofstream则默认写方式 ofstrean out("....",out)
open()也是如此 in.open("....",in);
10.string流。。。。。。。。。。看不懂。。。。。。