转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 网络书斋 >> 正文
第10章 C+ +流考点归纳         ★★★

《计算机二级C++考试辅导资料大全》之“ 第10章 C+ +流考点归纳”篇

作者:闵涛 文章来源:闵涛的学习笔记 点击数:4886 更新时间:2007/10/4 17:09:27
     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)。
     可以通过调用流对象的下列三个成员函数直接设置格式控制标志:
     ●fmtflags setf(fmtflags fmtfl,fmtflags mask);
其中类型fmtflags实际上就是类型int。参数fmtf1为格式控制标志,参数mask为域。此函数用于设置某个域中的标志,设置前先将该域中所有标志清除。函数返回设置前的格式控制标志。
     ●fmtflags setf(fmtflags fmtf1);
其中参数fmtf1为格式控制标志。此函数用于设置指定的标志,即将指定的标志位置为1,其他标志位不受影响。函数返回设置前的格式控制标志。此函数多用于adjustfield、basefield和floatfield三个域之外的格式控制标志的设置。
     ●void unsetf(fmtflags fmtf1);
其中参数fmtf1为格式控制标志或域。此函数用于清除指定标志或域,即将指定标志位或域清0。
     除了使用上述函数外,还可以用操作符进行格式控制。对应于上述setf函数的操作符是:setiosflags(<格式控制标志>),对应于上述的unsetf函数的操作符是 :resetiosflags(格式控制标志或域)。
     3输入输出宽度的控制
     宽度的设置可用于输入,但只对字符串输入有效。对于输出,宽度是指最小输出宽度。当实际数据宽度小于指定的宽度时,多余的位置用填充字符(通常是空格)添满;当实际数据的宽度大于设置的宽度时,仍按实际的宽度输出。初始宽度值为0,其含义是所有数据都将按实际宽度输出。宽度的设置与格式标志无关。有关的操作符是:
     ●setw(int n):设置输入输出宽度;
     等价函数调用:io.width(n)
     其中n为一个表示宽度的表达式。如果用于输入字符串,实际输入的字符串的最大长度为n-1。也就是说宽度n连字符串结束符也包含在内。函数 width返回此前设置的宽度;如果只需要这个返回值,可不给参数。
     注意:宽度设置的效果只对一次输入或输出有效,在完成了一个数据的输入或输出后,宽度设置自动恢复为0(表示按数据实际宽度输入输出)。宽度设置是所有格式设置中唯一的一次有效的设置。
     4浮点数输出方式的控制
     在初始状态下,浮点数都按浮点格式输出,输出精度的含义是有效位的个数,小数点的相对位置随数据的不同而浮动;可以改变设置,使浮点数按定点格式或指数格式(科学表示法,如3.2156e+2)输出。在这种情况下,输出精度的含义是小数位数,小数点的相对位置固定不变,必要时进行舍入处理或添加无效0。设置的输出方式一直有效,直到再次设置浮点数输出方式时为止。有关操作符有:
     ●resetiosflags(ios_base::floatfield):(此为默认设置)浮点数按浮点格式输出;
     等价函数调用:o.unsetf(ios_base::floatfield)
     ●fixed :浮点数按定点格式输出;
     等价函数调用:o.setf(ios_base::fixed,ios_base::floatfield)
     ●scientific:浮点数按指数格式(科学表示法)输出;
     等价函数调用:o.setf(ios_base::scientific,ios_base::floatfield)。
     5输出精度的控制
     输入输出精度是针对浮点数设置的,其实际含义与浮点数输出方式有关:如果采用的是浮点格式,精度的含义是有效位数;如果采用的是定点格式或指数格式(科学表示法),精度的含义是小数位数。精度的设置用于输出,默认精度为6,可以通过设置改为任意精度;将精度值设置为0意味着回到默认精度6。设置的精度值一直有效,直到再次设置精度时为止。精度的设置与格式标志无关。有关操作符是:
     ●setprecision(int n) :设置浮点数的精度(有效位数或小数位数);
     等价函数调用:io.precision(n)
     其中n为表明精度值的表达式。函数返回此前设置的精度;如果只需要这个返回值,可不给参数。
6对齐方式的控制
     初始状态为右对齐,可以改变这一设置,使得输出采用左对齐方式或内部对齐方式。设置的对齐方式一直有效,直到再次设置对齐方式时为止。只有在设置了宽度的情况下,对齐操作才有意义。有关操作符有:
     ●left:在设定的宽度内左对齐输出,右端填以设定的填充字符;
     等价函数调用:o.setf(ios_base::left,ios_base::adjustfield)
     ●right:(此为默认设置)在设定的宽度内右对齐输出;
     等价函数调用:o.setf(ios_base::right,ios_base::adjustfield)
     ●internal:在设定的宽度内右对齐输出;但若有符号(-或+),符号置于最左端;
     等价函数调用:o.setf(ios_base::internal,ios_base::adjustfield)
7小数点处理方式的控制
     此设置只影响采用浮点格式输出的浮点数据。在初始状态下,若一浮点数的小数部分为0,则不输出小数点及小数点后的无效0;可以改变这一设置,使得在任何情况下都输出小数点及其后的无效0。设置的小数点处理方式一直有效,直到再次设置小数点处理方式时为止。有关操作符有:
     ●showpoint:即使小数部分为0,也输出小数点及其后的无效0;
     等价函数调用:o.setf (ios_base ::showpoint)
     ●noshowpoint:(此为默认设置)取消上述设置:小数部分为0时不输出小数点;
     等价函数调用:o.unsetf(ios_base::showpoint)
8填充字符的控制
     在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用填充字符填满。初始填充字符为空格,可以将别的字符设置为填充字符。设置的填充字符一直有效,直到再次设置填充字符时为止。只有在设置了宽度的情况下,字符填充操作才有意义。填充字符的设置与格式标志无关。有关操作符是:
     ●setfill

[1] [2]  下一页


[招考就业]2010年国家公务员考试报考{参考指南}  [招考就业]2010年国家公务员考试备考指南
[Web开发]net在线考试系统如何控制考试时间  [Web开发]asp.net网上考试系统功能介绍
[网页制作]DreamWeaver+Css轻松实现网页段落首行缩进!  [网页制作]DIV+CSS+javascript实现DIV对象显示在页面任何位置…
[网页制作]div+css实现网页模块或栏目拖动(即拖拽效果)  [网页制作]XHTML+CSS兼容性解决方案
[网页制作]网页设计之css+div PK table+css  [网页制作]DIV+CSS三行两列经典布局
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程: 没有了
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 电脑应用  · 网络应用
    · 软件开发  · 软件使用
    · 站长学院  · 数据库
    · 应用范文  · 网络书斋
    · 考试认证  · 精彩网文
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台