欢迎来到天天文库
浏览记录
ID:34607985
大小:112.25 KB
页数:44页
时间:2019-03-08
《《高级语言c++程序设计(第二版)》第十章 输入输出流new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、10.2文件与流的概念1第十章输入输出流C++语句虽然从C语言接收下一套以printf函数库形式工作的I/O机制,但它并不满足于此,又开发了一套自己的具有安全、简洁、可扩展的高效I/O系统。以流类库形式工作的这个I/O系统显然是成功的。在前面的各章中,几乎所有的程序实例中都使用了系统提供的I/O流,以实现必要的I/O操作。本章将对于C++的I/O流系统做出全面的阐述,其目的有二:(1)介绍I/O流系统的工作原理和有关概念,特别是I/O操作和格式控制的方法;(2)把以实现I/O操作为基本功能的通过类的继承与多继承关系
2、构造起来的流类库,作为一个按OOP框架构造的实际的C++程序系统范例,帮助读者对以类为核心设计软件的方法与技术有一个较深入的认识。10.1文件、流及C++的流类库10.1.1流类库的优点用C++语言自己的支持I/O操作的流类库代替printf函数族,是一个明显的进步。虽然不少C程序员满足于C系统提供的I/O函数库,认为它是有效和方便的,但与C++的I/O系统相比,就显示出明显的缺点,因此没有人否认这种取代是必然的。(1)简明与可读性从直观上来看,这种改变使得I/O语句更为简明,增加了可读性。用I/O运算符(提取运算
3、符“>>”和插入运算符“<<”)代替不同的输入输出函数名(如printf,scanf等)是一个大的改进。例如,从下面的两个输出语句可以反映出二者之间的差别:printf("n=%d,a=%f",n,a);cout<<"n="<4、型安全,是指在进行I/O操作时不应对于参加输入输出的数据在类型上发生不应有的变化。仍以最简单的输出语句为例,下面是一个显示颜色值color和尺寸size的一个简单函数:show(intcolor,floatsize){cout<<"color="<5、数格式%d,%f,%c,%s的形式给出,同样实现上述函数show(),就可能产生编译器无法解决的问题:show(intcolor,floatsize){printf("color=%f,size=%d",color,size);}程序员在确认输出数据类型时发生错误是可能的,这时输出数据的类型:color是int型,size是float型,与printf()中给出的参数格式符%f对应color,%d对应于size,两者发生了矛盾。因此说,它是类型不安全的。而C++的I/O系统不会出现这种情形。(3)易于扩充在C+6、+语言所附的I/O系统,在其流类的定义中,把原来C++语言中的左、右移位运算符“<<”和“>>”,通过运算符重载的方法,定义为插入(输出)和提取(输入)运算符。这就为输入输出功能对于各种用户定义的类型数据的扩充,创造了方便的条件。而在stdio.h文件中说明的printf()函数却很难做到这一点。例如:在C++语言提供的I/O系统中,它是把运算符“<<”的重载函数作为输出流类ostream的成员函数来定义的,分别对字符串char,short,int,long,float,double,constvoid*(指针)等7、类型作了说明。在此基础上,用户不难对于新的类型数据的输出来重载运算符“<<”。它可以作为用户定义的类型(例如类complex)的友元函数来定义:friendostream&operator<<(ostream&s,complexc){s<<'('<8、带等。信息是数据和程序代码的总称。文件分为文本文件和二进制文件,前者以字节(byte)为单位,每字节对应一ASCII码,表示一个字符,故又称字符文件。文本文件保存的是一串ASCII字符,可用文字处理器对其进行编辑,输入输出过程中系统要对内外存的数据格式进行相应转换。二进制文件以字位(bit)为单位,实际上是由0和1组成的序列,输入输出过程中,系统不对相应数据
4、型安全,是指在进行I/O操作时不应对于参加输入输出的数据在类型上发生不应有的变化。仍以最简单的输出语句为例,下面是一个显示颜色值color和尺寸size的一个简单函数:show(intcolor,floatsize){cout<<"color="<5、数格式%d,%f,%c,%s的形式给出,同样实现上述函数show(),就可能产生编译器无法解决的问题:show(intcolor,floatsize){printf("color=%f,size=%d",color,size);}程序员在确认输出数据类型时发生错误是可能的,这时输出数据的类型:color是int型,size是float型,与printf()中给出的参数格式符%f对应color,%d对应于size,两者发生了矛盾。因此说,它是类型不安全的。而C++的I/O系统不会出现这种情形。(3)易于扩充在C+6、+语言所附的I/O系统,在其流类的定义中,把原来C++语言中的左、右移位运算符“<<”和“>>”,通过运算符重载的方法,定义为插入(输出)和提取(输入)运算符。这就为输入输出功能对于各种用户定义的类型数据的扩充,创造了方便的条件。而在stdio.h文件中说明的printf()函数却很难做到这一点。例如:在C++语言提供的I/O系统中,它是把运算符“<<”的重载函数作为输出流类ostream的成员函数来定义的,分别对字符串char,short,int,long,float,double,constvoid*(指针)等7、类型作了说明。在此基础上,用户不难对于新的类型数据的输出来重载运算符“<<”。它可以作为用户定义的类型(例如类complex)的友元函数来定义:friendostream&operator<<(ostream&s,complexc){s<<'('<8、带等。信息是数据和程序代码的总称。文件分为文本文件和二进制文件,前者以字节(byte)为单位,每字节对应一ASCII码,表示一个字符,故又称字符文件。文本文件保存的是一串ASCII字符,可用文字处理器对其进行编辑,输入输出过程中系统要对内外存的数据格式进行相应转换。二进制文件以字位(bit)为单位,实际上是由0和1组成的序列,输入输出过程中,系统不对相应数据
5、数格式%d,%f,%c,%s的形式给出,同样实现上述函数show(),就可能产生编译器无法解决的问题:show(intcolor,floatsize){printf("color=%f,size=%d",color,size);}程序员在确认输出数据类型时发生错误是可能的,这时输出数据的类型:color是int型,size是float型,与printf()中给出的参数格式符%f对应color,%d对应于size,两者发生了矛盾。因此说,它是类型不安全的。而C++的I/O系统不会出现这种情形。(3)易于扩充在C+
6、+语言所附的I/O系统,在其流类的定义中,把原来C++语言中的左、右移位运算符“<<”和“>>”,通过运算符重载的方法,定义为插入(输出)和提取(输入)运算符。这就为输入输出功能对于各种用户定义的类型数据的扩充,创造了方便的条件。而在stdio.h文件中说明的printf()函数却很难做到这一点。例如:在C++语言提供的I/O系统中,它是把运算符“<<”的重载函数作为输出流类ostream的成员函数来定义的,分别对字符串char,short,int,long,float,double,constvoid*(指针)等
7、类型作了说明。在此基础上,用户不难对于新的类型数据的输出来重载运算符“<<”。它可以作为用户定义的类型(例如类complex)的友元函数来定义:friendostream&operator<<(ostream&s,complexc){s<<'('<8、带等。信息是数据和程序代码的总称。文件分为文本文件和二进制文件,前者以字节(byte)为单位,每字节对应一ASCII码,表示一个字符,故又称字符文件。文本文件保存的是一串ASCII字符,可用文字处理器对其进行编辑,输入输出过程中系统要对内外存的数据格式进行相应转换。二进制文件以字位(bit)为单位,实际上是由0和1组成的序列,输入输出过程中,系统不对相应数据
8、带等。信息是数据和程序代码的总称。文件分为文本文件和二进制文件,前者以字节(byte)为单位,每字节对应一ASCII码,表示一个字符,故又称字符文件。文本文件保存的是一串ASCII字符,可用文字处理器对其进行编辑,输入输出过程中系统要对内外存的数据格式进行相应转换。二进制文件以字位(bit)为单位,实际上是由0和1组成的序列,输入输出过程中,系统不对相应数据
此文档下载收益归作者所有