IO库笔记记录

IO一般指的是 从设备中读取数据或者输出数据到设备中。这里的设备是多种多样的,可以是 文件,控制台窗口等,还可以是一些内存IO。

  1. IO类

    • iostream头文件中定义了基本的流,是其他类的基类。cin cout cerr 是这个的对象
    • fstream头文件中定义了文件流,属于是 作为文件的细分领域
    • sstream头文件中定义了字符串流,对应的设备可以认为是string

    这样的层次设计利用了继承机制。好处是可以像使用基类一样使用子类。我们可以像使用cin cout 那样使用fstream sstream 中的对象

    • IO类不可以被赋值。如果要作为参数或者返回值使用,要使用其引用。
    • IO类的状态通过其定义的一个iostate的bit集合 / 几个标志位(badbit, failbit, eofbit, goodfit)来进行判定。
    • IO类的几个标志位可以通过 对象名::badfit 的方式进行访问。也可以通过相应的查询函数的方式来进行访问。 每一个位都有对应的函数。fail函数在fail和bad位任何一个被置位的时候都返回true。good函数在没有任何错误位被置位的时候返回true
    • 每一个输出流都管理一个输出缓冲区。输出缓冲区的刷新默认只是在一些条件下才自动刷新。缓冲区满, 程序正常退出,使用一些操纵符比如endl(加入换行并刷新),ends(加入空字符并刷新),flush(刷新) , 也可以设置unitbuf来设置流内部的状态为有东西就立即刷新 , 关联的流的话,一个刷新,另外一个也会跟着刷新(关联的流有时候是必要的,比如cin和cout是关联的。可以保证在输入之前所有的输出都正常显示出来,否则会引发混乱,)。nounitbuf会回到正常的刷新方式。
    • tie函数可以完成流的关联。当没有参数的时候,表示查看关联流对象,其返回关联的ostream指针或者nullptr(无关联对象)。当参数为一个ostream的指针的时候,表示关联到这个对象。参数只可以是输出流指针。但是调用函数的可以是istream也可以是ostream对象。
  2. 文件输入输出

    • fstream头文件中有三个类可以用来进行文件的输入输出。ifstream(文件输入),ostraem(文件输出),fstream(文件输入和输出)。这些类型是iostream的子类。因此可以像使用cin cout一样使用。但是还有其他的方方法。
    • 上述的三种类的构造函数都可以1 默认构造函数 2 接受一个string或者c字符串类型的文件名 3 在2的基础上再加上一个mode,打开方式。三种类有open函数,close函数,is_open()函数
    • 如果构造函数中有文件名,那么自动调用open。当这个对象销毁的时候,自动调用close函数来关闭文件。
    • 由于c++的多态特性,可以在原本要求ostream引用 的地方传入 ifstream 同理 istream。这就体现了多态的优越性
    • 文件模式有in out app ate trunc binary 几种。在设置的时候可以用 | 进行分隔,表示或的关系。这些内容定义在相应的类内。in可以只可以用于ifstream或者fstream 。 out app trunc只可以用于ostream和fstream。istream默认in ostream默认out fstream默认为in | out
  3. string流

    • sstream头文件中定义了istringstream,ostringstream , stringstream三个类。
    • 其有构造函数 1 默认构造函数 2 接受一个string作为参数 其有成员函数str,当无参数的时候,返回其内部绑定的string,当有参数s的时候,表示绑定这个string。
    • istringstream可以配合getline(istream流, string) 来使用。先读取一行,再对一行的数据构造stringstream,进行拆解。
上一篇:C++文件输入输出流fstream的用法


下一篇:7.字符串、异常处理、文件和流(C++学习笔记)