电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C++面向对象程序设计 教学课件 ppt 作者 朱战立 张玉祥 chap9_IO流类库

72页
  • 卖家[上传人]:E****
  • 文档编号:89343160
  • 上传时间:2019-05-23
  • 文档格式:PPT
  • 文档大小:342KB
  • / 72 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、第9章 I/O流类库,主要内容 基本概念 C+的基本流类结构 Istream类和ostream类 格式控制 文件的读/写 可流类,9.1 基本概念,设备间的数据传送 内存 显示屏 内存 文件 键盘 内存 文件 内存 键盘 文件 流 面向对象技术中,任何设备都可以表示为相应类的对象,设备之间的数据传送即对象之间的数据传送。 数据从源对象到目的对象的传送可以抽象看做一个“流”。 当键入字符时,就可认为字符从键盘流入程序的数据结构中;,当写入磁盘文件时,也可认为程序流到磁盘上。 例如: cout变量名; 流类 把实现设备之间信息交换的类称作流类。 流库 若干流类的集合称做流类库。 C+流类库是用继承方法建立起来的一个输入/输出类库,它具有两个平行的基类即streambuf类和ios类,所有其它的流类都是从它们直接或间接地派生出来的。,9.2 C+的基本流库结构,C+为何建立自己的输入输出系统 C语言的输入/输出库函数不支持用户自定义的数据类型(如结构、类) ,用户也不能通过重载这些库函数来实现用户自定义数据类型的输入/输出。例如: struct my_struct int i; float

      2、f; char *str; s; 如果:printf(“%my_struct”, s); /错误 因为printf只能识别系统预定义的类型。,C+流库结构 每个流都是一种与设备相联系的既有状态,又有操作的对象,即流对象。对流对象进行抽象就得到流类,流类形成的层次结构就构成流类库(或流库)。 C+流库主要由两个流类层次组成: 以streambuf类为父类的类层次 主要完成信息通过缓冲区的交换。 以ios类为父类的类层次 在streambuf类实现功能的基础上,增加了各种格式化的输入/输出控制方法。,C+流类库示意图: streambuf类层次结构 缓冲区:是一个队列数据结构,由一字符序列和两个指针组成,这两个指针分别指向字符要被插入或被取出的位置。 streambuf类为所有的streambuf类层次对象设置了一个固定的内存缓冲区,动态划分为两部分: 用做输入的取区,用取指针指示当前取字符位置。 用做输出的存区,用存指针指示当前存字符位置。,filebuf类 是在fstream.h中定义的streambuf类的一个派生类,它使用文件来保存缓冲区中的字符序列。 将filebuf同某个文件的

      3、描述字相联系就称打开这个文件。 当写文件时,是将缓冲区的字符写到指定的文件中,之后刷新缓冲区; 当读文件时,是将指定文件中的内容读到缓冲区中来。,strstreambuf类 扩展了streambuf类的功能,增加了动态内存管理功能,提供了在内存中进行提取和插入操作的缓冲区管理。 stdiobuf类 主要用作C+语言的流类层次方法和C语言的标准输入/输出方法混合使用时系统的缓冲区管理。 在通过情况下,均使用这三个派生类,很少直接使用streambuf 类。,ios类层次结构 ios类及其派生类是在streambuf类实现的通过缓冲区的信息交换的基础上,进一步增加了各种格式化的输入/输出控制方法。它们为用户提供使用流类的接口,它们均有一个指向streambuf的指针。 ios类有四个直接派生类: istream ostream fstreambase strstreambase 这四种流作为流库中的基本流类。,ios类层次:,ios类的派生层次,从上图可看出各个类的继承关系,如: class ios; class istream : virtual public ios; class os

      4、tream : virtual public ios; class iostream : public istream, public ostream; 在istream类、ostream类和iostream类的基础上,分别重载赋值运算符“=”,就派生出istream_withassign、 ostream_withassign和ipstream_withassign类,即: class istream_withasssign : public istream; class ostream_withasssign : public ostream; class iostream_withasssign : public iostream;,ios虚基类 主要完成流的状态设置、状态报告、显示精度、域宽、填充字符的设置,文件流的操作模式定义等。 istream类和ostream类 对运算符和进行重载。 iostream类 以istream类和ostream类为基类,多重继承派生。可同时进行输入输出操作。,在编写C+程序时,使用标准的输入/输出流cin和cout进行输入/输出,是因为开始执行

      5、C+程序时,C+会自动打开几个预定义流: 标准输入流cin(缺省为键盘) 标准输出流cout(显示终端) 非缓冲型的标准出错流cerr(显示终端) 缓冲型的标准出错流clog(显示终端) 它们在iostream.h中说明为_withassign类的对象: extrean iostream_withassign cin; extrean iostream_withassign cout; extrean iostream_withassign cerr; extrean iostream_withassign clog;,9.3 istream类和ostream类,istream类 在流库中提供主要的输入操作,默认对象是cin; istream类是在include目录下的文件istream.h中,istream类中定义的运算符和成员函数包括输入运算符、get函数、getline函数、read函数等。 istream类的定义:,class istream : virtual public ios public: istream(streambuf *); istream ,叫做输入运算符,

      6、将数据从左边的流中读出。 int i; cini; /cin.operator(i); 重载的输入运算符“”均返回流类istream的引用,因此输入运算符可连用。例如: int x; char y; cinxy; 在读入一个字符串时,空格将作为一个串的终止。如: char ch20; cinch; 键盘输入 great wall ch中仅存放great.,缺省情况下,输入运算符在读取数据时,跳过空白字符,如: 12345 /读入时跳过前面的空格 不同类型的变量一起输入时,系统除检查是否有空白外,还检查输入数据与匹配情况。例如: int i; foat x; cin i x; 若输入: 56.79 32.85 实际结果:i = 56, x = 0.79,系统用数据类型分隔输入数据,如果读取的数据类型与输入运算符的参数类型不符,它将返回零值,并终止输入,如:,int v3; for(int i=0; ivi) cout“v“i“= “ viendl; continue; coutiendl; ,键盘输入:11gh55 程序运行结果: v0=11 1 2,例9.1 设计一个从键盘输入中提取若

      7、干个字符或字符串的例子。,#include void main(void) int length = 6; char a, b6, c6; cin.get(a); cin.get(); /跳过输入流中1个字符 cin.getline(b, length); cin.get(); cin.getline(c, length); couta“ ”b“ ”cendl; ,为什么可直接使用“cin” 进行输入? 当开始执行程序时,系统自动为其建立一个istream_withassign类的对象cin。 而istream_withassign是istream的派生类,它继承了基类的所有公有成员,在istream类中重载了几乎所有系统预定义类型的输入运算符“”。 对象cin可调用这些“”,因此用户可直接使用“cin”输入系统预定义类型的变量。,ostream类 ostream类在流库中提供主要的输出操作,默认对象是cout。 ostream类是在include目录下的文件ostream.h中,ostream类中定义的运算符和成员函数包括输出运算符、put函数、write函数等。 ostream类定

      8、义:,class ostream : virtual public ios public: ostream(streambuf * ); ostream ,叫做输出运算符,将运算符右边的数据存储到左边的流中。 cout“string”; cout.operator(“string”); 所有重载的输出运算符均返回ostream的引用,利用该引用可继续调用下一个输出运算符函数,因而在一条语句中可以显示多个数据,如: int x; cout“x=“x; 系统执行如下:输出运算符按自左至右的顺序 cout.operator(“x=“).operator(x),输出运算符重载之后,没有改变其优先级,如果输出的数据含有表达式,应注意运算顺序,如: coutx+yn; /正确,+的优先级高 coutx,struct mytype int i; float f; char c; ; mytype mt; cinmt; cout”来实现。 例9.2 设计一个包含几种典型情况的屏幕输出的例子。 P197,重载输出运算符“” 通过重载输出运算符“”来实现用户自定义类型的输出,定义格式为: ostream

      9、下面举一个具体的例子:,#include class three_d int x, y, z; public: three_d(int x1, int y1, int z1) : x(x1), y(y1), z(z1) / friend ostream ,void main(void) three_d obj1(10, 20, 30); coutobj1; ,说明: 重载的operator函数必须返回一个输出流类ostream对象的引用,这样,重载的输出运算符“”可连用。 输出运算符“”是双目运算符,使用时必须是输出流对象为第一操作数,输出数据为第二操作数,次序不能改变。 一般情况下,重载输出运算符函数不能是类的成员函数。(因为如果一个运算符函数是类的成员,则其左运算数就应当是调用运算符函数的类的对象。但重载运算符时,其左边参数是流,而右边的参数是类的对象。),重载输入运算符“” 通过重载输入运算符“”来实现用户自定义类型的输入,定义格式为: istream 下面举一个具体的例子:,#include class three_d int x, y, z; public: three_d(int x1, int y1, int z1) : x(x1), y(y1), z(z1) void print()cout(istream ,void main(void) three_d obj1(10, 20, 30); obj1.print(); cinobj1; obj1.print(); ,说明: 重载的operator函数必须返回一个输入流类istream对象的引用,这样,重载的输入运算符“”可连用。 与重载输出运算符函数一样,重载输入运算符函数也不能是所操作类的成员函数,但可以是该类的友元函数或独立函数。,9.4 格式控制,C+语言提供了两种格式控制方法 利用ios类中的格式控制成员函数 利用操作符,格式控制成员函数 状态设置和状态报告 ios类中定义的long类型的保护数据成员x_flag用于存入控制

      《C++面向对象程序设计 教学课件 ppt 作者 朱战立 张玉祥 chap9_IO流类库》由会员E****分享,可在线阅读,更多相关《C++面向对象程序设计 教学课件 ppt 作者 朱战立 张玉祥 chap9_IO流类库》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.