文档详情

《高级语言C++程序设计(第一版)-第十章.》.pdf

发布:2016-01-02约2.34万字共21页下载文档
文本预览下载声明
244 第十章 输入输出流(I/O Stream) 第十章 输入输出流(I/O Stream) C++语句虽然从 C 语言接收下一套以printf 函数库形式工作的 I/O 机制, 但它并不满足于此,又开发了一套自己的具有安全、简洁、可扩展的高效 I/O 系统。以流类库形式工作的这个 I/O 系统显然是成功的。在前面的各章中,几 乎所有的程序实例中都使用了系统提供的 I/O 流,以实现必要的 I/O 操作。本 章将对于C++ 的I/O 流系统做出全面的阐述,其目的有二: (1) 介绍I/O 流系统的工作原理和有关概念。特别是I/O 操作和格式控 制的方法; (2) 把以实现I/O 操作为基本功能的通过类的继承与多继承关系构造起 来的流类库,作为一个按 OOP 框架构造的实际的 C++程序系统范例,帮助读 者以类为核心设计软件有一个较深入的认识。 10.1流类库的优点 用 C++语言自己的支持 I/O 操作的流类库代替printf 函数族,是一个明显 的进步。虽然不少C 程序员满足于C 系统提供的I/O 函数库,认为它是有效和 方便的,但与C++ 的I/O 系统相比,就显示出明显的缺点,因此没有人否认这 种取代是必然的。 (1) 简明与可读性。 从直观上来看,这种改变使得 I/O 语句更为简明,增加了可读性。用 I/O 运算符(提取运算符和插入运算符 )代替不同的输入输出函数名(如printf , scanf 等)是一个大的改进。例如,从下面的两个输出语句可以反映出二者之间 的差别: printf(n=%d,a=%f\n,n,a); coutn=n,a=aendl; 虽然两个语言的输出结果是一样的,但在编写程序语句和阅读它们时,感 觉却是不同的。后者简明,直观,易写,易读,几乎所有的C 程序员转而使用 C++语言后,都很自然地接受了新的形式,再让他返回到旧的方式反而会感到 10.1流类库的优点 245 不习惯了。 (2) 类型安全(type safe) 所谓类型安全,是指在进行I/O 操作时不应对于参加输入输出的数据在类 型上发生不应有的变化。仍以最简单的输出语句为例,下面是一个显示彩色值 color 和尺寸size 的一个简单函数: show(int color,float size){ coutcolor=color,size=sizeendl; } 在这个函数的调用过程中,系统(编译器)将自动按参数的类型定义检查 实参的表达式,显示的结果中,第一个自然是整数值,第二个size 必然是浮点 类型值。 如果采用printf ()函数,由于其参数中的数据类型必须由程序员以参数格 式%d ,%f ,%c ,%s 的形式给出,同样实现上述函数show (),就可能产生编 译器无法解决的问题: show(int color,float size){ printf(color=%f,size=%d\n,color,size); } 程序员在确认输出数据类型时发生错误是可能的,这时输出数据的类型: color 是int 型,size 是float 型,与printf ()中给出的参数格式符%f 对应color , %d 对应于size ,两者发生了矛盾。因此说,它是类型不安全的。而C++ 的I/O 系统不会出现这种情形。 (3) 易于扩充 在C++语言所附的I/O 系统,在其流类的定义中,把原来C++语言中的左、 右移位运算符和 ,通过运算符重载的方法,定义为插入(输出)和提取(输 入)运算符。这就为输入输出功能对于各种用户定义的类型数据的扩充,创造 了方便的条件。而在 stdio.h 文件中说明的printf ()函数却很难做到这一点。 例如: 在C++语言提供的I/O 系统中,它是把运算符‘ ’的重载函数作为输出 流类ostream 的成员函数来定义的,分别对字符串char ,short,in
显示全部
相似文档