输入输出库:
C++本身不包含输入输出功能,C++标准库提供一套用于输入输出的类库
输入输出库的类层次结构异常复杂,实现结合多态和多重继承机制,利用模版类实现
输入输出库流类层次:
1、基类 ios_base 描述类的基本性质,但不考虑流的字符集
2、basic_ios继承ios_base 描述了类的基本性质,而且描述了流的字符集
3、派生类basic_istream和basic_ostream继承basic_ios。
4、basic_iostream对basic_istream和basic_ostream进行多重继承。basic_ifstream basic_istringstream继承basic_istream, basic_ostringstream basic_ofstream继承basic_ostream
5、basic_stringstream和basic_fstream派生于basic_iostream
输入输出库缓冲类层次:
输入输出库提供的输入输出功能是带缓冲的输入输出,数据并不直接读入和写出,而是通过缓冲区buffer进行。
basic_streambuf为基类 basic_filebuf和basic_stringbuf派生于basic_streambuf.
basic_streambuf包含了用于处理上溢(overflow)和下溢(underflow)虚函数。上溢发生于对已满的缓冲区进行写入操作。下溢发生于对已空的缓冲区进行读取操作。
缓冲类层次从流类层次中独立使得高层输入输出功能独立于底层输入输出功能。
通用类集合:ios_base、basic_ios、basci_streambuf、basic_istream、basic_ostream
字符流类集合: basic_stringbuf、basic_istringstream、basic_ostringstream、basic_stringstream
文件流类集合:basic_filebuf、basic_ifilestream、basic_ofilestream、basic_filestream
输入输出模板:
template <class charT, class traits=char_traits<charT>>
class basic_ios:public ios_base{};
第一个参数表名字符的数据类型 traits表名字符类型的特性如文件标识符、一个字符晓钰另外一个字符的含义等
stringstream和filestream均通过char实例化。
ios_base类:
声明fmtflags类型用于定义格式化信息(bitmask),提供成员函数供设置flags() setf() unsetf()
定义了流状态标志 badbit eofbit failbit goodbit
定义了流打开状态标志 app ate binary in out trunc
定义了seek操作哦标志 beg cur end
basic_ios类:
rdstate() clear() setstate good eof fail bad()
basic_istream:
获取字符get() 获取整行 getline() 从流中读入字符并存储 read() 从流中返回下一个字符 peek
把字符送入流水 putback 从六种移去指定数量字符 ignore()
返回上一次用未格式化的输入成员函数读取的字符总数 gcount
返回输入流的位置 seekg tellg
重载>> 读入数据
basic_ostream
将字符写入输出流中 put
将m个字符从字符数组中写入输出流 write
seekp tellp
对缓冲区进行清扫 flush
重载<<用于输出格式化数据
操作器:
操作器是一个函数 可以直接或间接的改变流
带参操作器:setbase setfill setprecision setw setiosflags resetiosflags 必须包含iomanip头文件
无参操作器: hex endl
basic_ofstream类
open isopen close
basic_ifstream类
open is_open close