- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第19章 I/O流 徐素锦 本章主要内容 简介 19.1 printf和scanf的缺陷 19.2 I/O标准流类 19.3 文件流类 19.4 串流类 19.5 控制符 19.6 使用I/O成员函数 19.7 重载插入运算符 19.8 插入运算符与虚函数 19.9 文件操作 作业 简 介 流:数据的流动,抽象为“流”类 C++ 的流类库提供了一组“类”,利用这些类可以实现计算机与外设之间进行数据交流。 19.1 printf和scanf的缺陷 1.非类型安全: 编译系统对函数原型进行检查(参数个数、参数类型),可以避免许多错误,但是编译系统对printf() 和scanf() 函数只检查第一个参数(参数个数和类型信息包含在第一个参数中),所以,其他的错误无法在编译时被发现。 下面的函数企图输入和输出异于格式符的数据: #include stdio.h int j=10; float f=2.3 19.1 printf和scanf的缺陷 void fn() { printf(“%d”,f); /*int型占两个字节情况下,只输出f变量中前两个字节内容,并按int型数据格式进行解释;*/ scanf(“%d”,f); /*只输入到f变量中前两个字节中,按int型格式进行存放,而后面两个字节内容却没有改变*/ scanf(“%d”,j); /*将键入值存放到地址为ox000A的内存空间中;*/ printf(“%d”,”abcde”); /*输出”abced”的地址值,而不是想要得字串。*/ } 19.1 printf和scanf的缺陷 2.不可扩充性: 不能对类对象进行输入输出。 下面的函数企图输入和输出一个类的对象: class A{/*…*/} A a; //… void fn() { printf(“%?”,a); /* ?表示不知以什么格式符来识别A的对象*/ scanf(“%?”,a); } 19.2 I/O标准流类 在C++中,输入/输出操作是由“流”来处理的。流是C++的一个核心概念,数据从一个位置到另一个位置的流动抽象为流。 输入:从“流”中获取数据 输出:向“流”中添加数据 19.2 I/O标准流类 1.标准流的设备名 iostream.h:标准I/O流头文件,在该文件中对各个流类定义了各自的全局对象。 19.2 I/O标准流类 1.标准流的设备名 cin:是istream类的对象,用来处理标准输入,对应设备是键盘 cout:是ostream类的对象,用来处理标准输出,对应设备是屏幕 cerr:是ostream类的对象,用来处理标准出错信息,对应设备是屏幕 clog:是ostream类的对象, C++ 提供的标准打印流对象名,对应设备是打印机 19.2 I/O标准流类 2. 原理 cout 是ostream 流类的对象,它在iostream.h 头文件中作为全局对象定义: ostream cout(stdout); // 标准设备名作为其构造时的参数 ostream流类对应每个基本数据类型都有友元,它们在iostream.h中声明: ostream operator(ostream dest, char * pSource); ostream operator(ostream dest, int pSource); ostream operator(ostream dest, char source); 19.2 I/O标准流类 分析语句: cout My name is Jone ; cout是ostream对象,是操作符,右面是char*类型,故匹配的操作符函数:ostream operator(ostream dest,char * pSource); 它将整个字串输出,并返回ostream流对象的引用。 如果是: cout this is 7; 可看作: (cout this is )7; 19.2 I/O标准流类 cin是istream类的对象,istream流类也由若干个友元: istream operator(istream dest,char * pSource); istream operator(istream dest,int pSource); istream operator(istream dest,char source); eg: cinab; 除了标准输入设备,还有标准错误设备cerr。 当程序测试并处理关键错误时,不希望程序的错误信息从屏幕显示重定向到其它地方,这时使用cerr流显示信息。 写到cerr上的信息是不能被重定向的,只能在屏幕上显示。 19.2 I/O标准流类 重定
文档评论(0)