《高级语言C++程序设计(第一版)-第十章.》.pdf
文本预览下载声明
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
显示全部