灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:8697回复:0

[二级考试]2014年计算机二级C++考点解析:C++流

楼主#
更多 发布于:2013-11-04 11:50
10.1 C++流的概念

  1 C+ +流的体系结构

  要利用C+ +流,必须在程序中包含有关的头文件,以便获得相关流类的声明。为了使用新标准的流,相关头文件的文件名中不得有扩展名。与C+ +流有关的头文件有:

  iostream:要使用cin、cout的预定义流对象进行针对标准设备的I/O操作,须包含此文件。

  fstream:要使用文件流对象进行针对磁盘文件的I/O,操作须包含此文件。

  strstream:要使用字符串流对象进行针对内存字符串空间的I/O操作,须包含此文件。

  iomanip:要使用setw、fixed等大多数操作符,须包含此文件。

  注意,为了使用新标准的C+ +流,还必须在程序文件的开始部分插入下面这个名字空间声明:

  using namespace std;

  2  预定义流对象

  C+ +流有4 个预定义的流对象,它们的名称及与之联系的I/O设备如下:

  cin 标准输入

  cout 标准输出

  cerr 标准出错信息输出

  clog 带缓冲的标准出错信息输出

  3 提取运算符  和插入运算符  

  输入流类istream重载了运算符  ,用于数据输入,其原形具有

  istream& operator  ( istream&, 类型修饰 &); 的形式。重载的的功能是从输入流中提取数据赋值给一个变量,因此称之为提取运算符(extractor)。当系统执行cin  x操作时,将根据实参x的类型生成相应的提取运算符重载函数的实例并调用该函数,把x 引用传送给对应的形参,接着从键盘的输入 缓冲区中读入一个值并赋给x(因形参是x的引用)后,返回istream流,以便继续使用提取运算符为下一个变量输入数据。

  输出流类ostream重载了运算符,用于数据输出,其原形具有

  ostream& operator  (ostream&, 类型修饰 );

  的形式。重载的  的功能是把表达式的值插入到输出流中,因此称之为插入运算符(inserter)。当系统执行cout  x操作时,首先根据x值的类型调用相应的插入运算符重载函数,把x 的值传送给对应的形参,接着执行函数体,把x 的值(亦即形参的值)输出到显示器屏幕上,在当前屏幕光标位置起显示出来,然后返回ostream流,以便继续使用插入运算符输出下一个表达式的值。

  上面格式中的“类型修饰符”是指char、int、double、char*、bool等等C+ +中固有类型的修饰符。也就是说,只要输入输出的数据属于这些C+ +固有类型中的一种,就可以直接使用  或  完成输入输出任务。在完成输入输出任务后,  和  把第一参数(即流对象的引用)返回,因此这两个运算符可以连续使用,如cin  a  b  c;等。

  4 有格式输入输出和无格式输入输出

  利用C+ +流既可进行有格式输入输出,也可进行无格式输入输出。

  计算机所处理的数据都有内部存储格式和外部表现形式的区分,因此在输入输出过程中必须进行适当的转换,有格式输入输出就是完成这一任务的。有格式输入输出针对的是键盘、显示器、打印机等字符设备以及磁盘中的文本文件。对于有格式输入输出,无论输入输出的数据是什么数据类型,体现在外部设备上都是字符序列。

  对于无格式输入输出,数据的内部存储存格式与外部存储格式完全相同,因此无格式输入输出只能针对磁盘文件(或磁带、光盘上的文件),而且这样的文件通常不能用一般的文本编辑器查看。进行无格式输入输出需调用流对象的专门的成员函数实现。

  5 操作符

  C+ +流提供了提取运算符  和插入运算符  ,使得输入输出的表达简洁、形象、直观,这最能体现C+ +流的风格。C+ +流还提供了很多输入、输出或控制输入输出的成员函数,须通过.或- 加以调用,不能与运算符  或  配合使用,因而与C+ +流的整体风格很不协调。为此,C+ +提供了一系列可与运算符  或  配合使用的特殊函数,称为操作符(manipulator)。每个操作符都与一个具体的函数相联系,使得  或  可间接地通过它们调用与之联系的函数,完成相应的输入 、输出功能或输入输出控制功能。前面经常用到的endl、setw等就是操作符。有了操作符,C+ +流操作在风格上就更加统一,输入输出操作也显得更加流畅。

 10.2 输入输出的格式控制

  1 默认的输入输出格式

  在没有特地进行格式控制的情况下,输入输出采用默认格式。

  (1)默认的输入格式

  C+ +流所识别的输入数据的类型及其默认的输入格式包括:

  short、int、long(signed、unsigned):与整型常量同

  float、double、long double:与浮点数常量同

  char(signed、unsigned):第一个非空白字符

  char *(signed、unsigned):从第一个非空白字符开始到下一个空白字符结束

  void*:无前缀的16进制数

  bool:把true或1识别为true,其他的均识别为false(vc6.0中把0识别为false,其他的值均识别为true)

  (2)默认的输出格式

  C+ +流所识别的输出数据的类型及其默认的输出格式包括:

  char(signed、unsigned): 单个字符(无引号)

  short、int、long(signed、unsigned):一般整数形式,负数前有-号

  char *(signed、unsigned): 字符序列(无引号)

  float、double、long double:浮点格式或指数格式(科学表示法),取决于哪个更短

  void *: 无前缀的16进制数

  bool: 1或0

  2.格式标志与格式控制

  在作为流库根类的ios_base中,有一个作为数据成员的格式控制变量,专门用来记录格式标志;通过设置标志,可以有意识地对有格式输入输出的效果加以控制。各种格式标志被定义为一组符号常量。

  这些作为格式标志的常量与整数的对应关系是精心安排的,每一个标志对应一个二进制位,为1时表示对应标志已设置,为0时表示对应标志未设置。这些作为标志的二进制位保存在格式控制变量的低端的若干位中,每一个流对象都有这样一个作为数据成员的格式控制变量。在外部使用这些格式标志时,必须在标志前加上ios_base::修饰。

  格式标志中的有些关系密切的相邻标志被规定为域,一共有三个:由left、right和 internal组成的域称为adjustfield(对齐方式域);由dec、oct和hex组成的域称为basefield(数制方式域);由scientific和fixed组成的域称为floatfield(浮点方式域)。adjustfield、basefield和floatfield也是在ios_base中定义的,因此在外部使用时也必须加上域修饰前缀ios_base::(如ios_base::adjustfield)。

喜欢1 评分0

最新喜欢:

高手吴高手吴
游客

返回顶部