一、IO类
C++通过一组定义在标准库中的类型来处理IO。这些类型支持从设备读取数据、向设备写入数据的IO操作,设备可以是文件、控制台窗口等。
IO库定义了读写内置类型值的操作。此外,一些类,如string,通常也会定义类似的IO操作,来读写自己的对象。
一、IO类
iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型。
宽字符版本的类型和函数以一个w开始。
类型ifstream和istringstream都继承自istream,因此我们可以像使用istream对象一样来使用ifstream和istringstream对象。类似的,类型ofstream和ostringstream都继承自ostream。
1. IO对象无拷贝或赋值
进行IO操作的函数通常以引用方式传递和返回流。读写一个IO对象会改变其状态,因此传递和返回的引用不能是const的。
2. 条件状态
3. 管理输出缓冲
刷新输出缓冲区
① 操作符endl :完成换行并刷新缓冲区;
② 操作符flush : flush刷新缓冲区,但不输出任何额外的字符;
③ 操作符ends : ends向缓冲区插入一个空字符,然后刷新缓冲区。
unitbuf操作符
关联输入和输出流
tie有两个重载的版本:一个版本不带参数,返回指向输出流的指针。如果本对象当前关联到一个输出流,则返回的就是指向这个流的指针,如果对象未关联到流,即返回空指针。tie的第二个版本接受一个指向ostream的指针,将自己关联到ostream。即,x.tie()&o将流x关联到输出流o。
二、文件输入输出
头文件fstream定义了三个类型来支持文件IO:ifstream从一个给定文件读取数据,ofstream向一个给定文件写入数据,以及fstream可以读写给定文件。
1. 使用文件流对象
当我们想要读写一个文件时,可以定义一个文件流对象,并将对象与文件关联起来。每个文件流都定义了一个名为open的成员函数,它完成一些系统相关的操作,来定位给定的文件,并视情况打开为读或写模式。
文件名既可以是string对象,也可以是C风格字符串数组。
用fstream代替iostream&
成员函数open和close
如果我们定义了一个空文件流对象,可以随后调用open来将它与文件关联起来:
自动构造和析构
2. 文件模式
每个流都有一个关联的文件模式(file mode),用来指出如何使用文件。