发布日期:2015-12-29 14:53 来源: 标签: 编程语言 C++教程 C++流 C++流类库
C++中的流是指数据从一个对象传递到另一个对象的操作。从流中读取数据称为提取操作,向流内添加数据称为插入操作。流在使用前要建立,使用后要删除。如果数据的传递是在设备之间进行,这种流就称为I/O流。C++专门内置了一些供用户使用的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。
一流的概念及流类库
1.1 流的概念
C++中的流是指数据从一个对象传递到另一个对象的操作。从流中读取数据称为提取操作,向流内添加数据称为插入操作。流在使用前要建立,使用后要删除。如果数据的传递是在设备之间进行,这种流就称为I/O流。C++专门内置了一些供用户使用的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。
C++流预定义了4个标准流类对象,它们可以直接用来输入输出。这些标准流类对象都包含在头文件iostream.h中。
istream cin;        //与标准输入设备相关联的标准输入流。
ostream cout;       //与标准输出设备相关联的标准输出流。
ostream cerr;       //与标准错误输出设备相关联的非缓冲方式的标准输出流。
ostream clog;       //与标准错误输出设备相关联的缓冲方式的标准输出流。
1.2 流类库
C++的流类库有两个平行的基类streambuf和ios,其它的流类都是从这两个基类直接或间接派生的。使用这些流类库时,必须包含相应的头文件。
ios类及其派生类为用户提供了使用流类的接口。以下给出ios类及其派生类的层次结构图。
输入输出的格式控制
C++仍可使用C中的printf()和scanf()进行格式化控制,同时又提供了两种格式化控制的方法,一是使用ios类中的有关格式控制的成员函数,二是使用执行格式化输入/输出的格式控制符。
2.1 用ios类的成员函数进行格式控制
使用这种方式进行格式控制主要是通过设置及清除格式状态标志、设置域宽、设置填充字符和设置输出精度的操作来完成的。
设置及清除格式状态标志
①格式状态标志
图12.2中的格式状态标志在类ios中被定义为枚举值,这些枚举元素的值的共同特点是,使状态标志字二进制表示中的不同位为1,它们共同组成状态标志字,存放在数据成员long x_flags中。在设置格式状态时可以通过按位或(|)运算将多个标志选项组合在一个long int型的值中。
②设置状态标志
使用成员函数setf设置参数所指定的格式标志,并返回long int型的标志设置值。
一般调用形式为:
流对象.setf(格式状态标志);
③清除状态标志
使用成员函数unsetf清除指定的标志并返回清除前的标志值。
一般调用形式为:
流对象.unsetf(格式状态标志);
④取状态标志
用成员函数flag,其不带参数时返回格式状态标志的当前设置(long int型值);带参数时按参数指定的格式设置标志,返回以前的标志设置值。
一般调用形式为:
流对象.flags();
流对象.flags(格式状态标志);
注意:flags()与setf()的区别是:setf()是在原有的基础上追加设置,不改变原有设置;flags()使用新的设置覆盖原有的设置,改变了原有设置。
设置域宽
域宽是指输出字符的长度。用成员函数width()完成域宽的设置。
一般调用形式为:
流对象.width();
流对象.width(int w);
说明:
①不带参数时返回当前的域宽值;
②带参数时将域宽值设置为w,并返回设置前的域宽值。
设置填充字符
当输出值长度小于域宽时将剩余部分用设定的填充字符填满,缺省的填充字符为空格。用成员函数fill设置填充字符。
一般调用形式为:
流对象.fill();
流对象.fill(char ch);
说明:
①不带参数时返回当前的填充字符;
②带参数时将填充字符设置为ch,并返回设置前的填充字符。
③使用填充字符函数时,必须与设置域宽函数配合使用,否则没有意义。
设置输出精度
用函数precision()设置浮点数输出时的显示精度。
一般调用形式为:
流对象. precision(int p);
用格式控制符进行格式控制
自定义的格式控制符
为输出流自定义格式控制符的一般形式为:
    ostream &格式控制符名(ostream &stream)
    {
      //自定义代码
      return stream;
    } 
为输入流自定义格式控制符的一般形式为:
    istream &格式控制符名(istream &stream)
    {
      //自定义代码
      return stream;
    }
输入与输出运算符的重载
定义运算符“<<”重载函数的一般形式为:
    ostream &operator<<(ostream &stream,类名 对象名)
    {  
      //操作代码
      return stream;
    }
定义运算符“>>”重载函数的一般形式为:
    istream &operator>>(istream &stream,类名 &对象名)
    {  
      //操作代码
      return stream;
}
说明:重载输入/输出运算符函数只能为非成员函数,一般被定义为类的友元。




相关评论

专题信息
    C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性! 本教程从基础讲解了C++语言,希望对大家有所帮助,望多多支持中国站长网络学院。