c面向对象程序第13章

上传人:san****019 文档编号:70001534 上传时间:2019-01-15 格式:PPT 页数:55 大小:336.51KB
返回 下载 相关 举报
c面向对象程序第13章_第1页
第1页 / 共55页
c面向对象程序第13章_第2页
第2页 / 共55页
c面向对象程序第13章_第3页
第3页 / 共55页
c面向对象程序第13章_第4页
第4页 / 共55页
c面向对象程序第13章_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《c面向对象程序第13章》由会员分享,可在线阅读,更多相关《c面向对象程序第13章(55页珍藏版)》请在金锄头文库上搜索。

1、C+ 面对对象程序设计,授课老师:,第13章输入/输出流类库与文件操作,本章要点 13.1 流类体系 13.2 文件操作,本章要点 I/O流、流类与流类体系的概念 流的输入输出控制格式 文件的概念及文件的使用 文件流类体系结构 文本文件与二进制文件的使用,13.1.1流(stream),流(stream)是一种抽象。它负责在数据的生产者和数据的消费者之间建立联系,并负责管理数据的流动。在C+程序中,数据可从键盘流入程序中,也可以从程序流向屏幕或磁盘文件。C+的流类主要是以两个类为基础的;ios类和streambuf类,由ios类和streambuf类所派生出来的类各自负责不同的工作。ios类及

2、其派生类用于处理与输入、输出有关的操作,例如读写文件、键盘输入和屏幕输出等。,C+语言在开始使用流类时,就预定义了如下4个常用的输入输出流对象,cin:是istream类的对象,用于处理键盘输入。 cout:是ostream类的对象,用于处理屏幕输出。 cerr:是ostream类的对象。用于处理出错信息,并直接输出。 clog:是ostream类的对象,用于处理出错信息,并使用缓冲区输出。,13.1.2输入/输出流,1.输出流 cout是ostream类的对象,因为它所指向的是标准输出设备(显示器屏幕),所以它在iostream头文件中作为全局对象进行定义。 cout对象定义格式如下: os

3、tream cout(stdout); cout默认指向的C+中的标准设备名,作为其构造函数的参数使用。 在iostreamh头文件中,ostream类对应每个基本数据类型都有其友元函数对左移操作符进行了友元函数的重载。,2.输入流,流的输入采用提取运算符“”来实现,其左操作数为输入流类istream的对象。 istream已经预定义了对C+内部数据类型的输入方法。 C+中预定义了一个标准输入流对象cin,它对应于C语言中的stdin,用于从标准输入设备(通常为键盘)读入数据。下面的例子从标准输入设备读入整型数据和双精度数据,然后输出。,【例13-1】读入一个整型数据和一个双精度数据并输出,#

4、include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ void main() int i; double d; cini; cind; couti“,“dendl; getchar(); ,程序执行后输出结果如下,3 5.6 3,5.6 提取运算表达式的值自然为输入流对象,上面例子中的两行输出语句可以连写为cid; 提取运算符可以重载,由用户定义如何输入自定义的类对象。在重载提取运算符时,同时应将其重载为类的友元,而不是成员。对于任何给定的用户定义类型T,定义一个operator函数,用于从指定的输入流读取T类型的对象。,【例1

5、3-2】Point类重载插入运算符示例,#include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ class point int x,y; public: point(int x,int y) point:x=x; point:y=y; point operator +(point p) return point (x+p.x,y+p.y); /接下页,point operator -(point p) return point (x-p.x,y-p.y); friend istream istream &operator (is

6、tream &in,point &pt) / 接下页, char ch; inch; if (ch = c) inpt.x; inch; inpt.y; inch; return in; ,13.1.3流的格式控制,(1)格式控制成员函数 ios类定义的格式控制成员函数必须作为流对象(如:cout、cin)的成员函数来使用,因此其调用格式为: (); (2)预定义格式控制函数。C+直接提供的预定义格式控制函数为普通函数。因此其调用格式为: ():,1流的输出格式控制,(1)输出宽度及填充字符。输出宽度可通过输出格式控制成员函数width(n)、填充成员函数fill(c)与预定义格式控制函数se

7、tw(n)实现。其中n为输出数据的宽度,c为填充字符。 width成员函数与fill成员函数均在头文件iostreamh中说明,因此要使用这两个函数,必须在程序中包含iostreamh头文件。而预定义格式控制函数setw在头文件iomaniph中说明,要使用setw必须在程序中包含iomaniph头文件。,【例13-3】使用width成员函数控制输出宽度,#include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ void main() float a=11, 22.2, 33.33, 44.444, 55.5555; for(in

8、t i=0; i5; i+) cout.width(10); /设置输出宽度为10 coutaiendl; getchar(); ,由于width是ios类的成员函数,所以必须作为ios类的对象cout的成员函数来使用。因此,其调用格式为coutwidth(10);程序运行后输出结果:,11 222 3333 44444 555555,【例13-4】将学生姓名与比赛得分通过初始化赋给数组name5、score5,使用预定义格式控制函数setw指定宽度,#include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ #include “i

9、omanip.h“ void main() /接下页,char *name=“Zhou“,“Zhao“,“Liu“,“Chen“,“Li“; double score=11, 22.2, 33.33, 44.444, 55.5555; for(int i=0;i5; i+) coutsetw(6)nameisetw(10)scoreiendl; getchar(); 程序运行后输出结果: Zhou 11 Zhao 222 Liu 3333 Chen 44444 Li 555555,说明:,由于setw不是成员函数,所以应直接调用,如:coutsetw(6);用setw(6)将字符串namei输

10、出在宽度为6的域中,而用setw(10)将双精度数scorei输出在宽度为10的域中。 setw与width都不截断数值。若数值位超过了指定宽度,则会全部显示。 setw和width仅影响紧随其后的域,在一个域输出完后,域宽度将恢复其默认值。因此,setw(6)与setw(10)必须放在循环语句中,而不能在循环语句前作一次性格式控制设置。,(2)输出对齐方式及其他控制,若要改变输出流的对齐方式,可使用预定义格式控制函数setiosflags来实现。预定义格式控制函数setiosflags的格式如下: setiosflags (参数) 其中参数为在ios类中定义的枚举量 .,2流的输入控制格式,

11、数据的输入输出可以分为三大类:字符类、字符串类和数值类(整数、实数、双精度)。每一类又可分为多种类型,如长整型、短整型、有符号型和无符号型等。不同类型数据的输入是由类istream通过重载“”运算符来实现的。 在C+中,允许用户自己定义istream的对象。但只要程序中包含头文件iostreamh,系统自动为该程序产生输入流cin和输出流cout。通常用户只要利用流cin就可完成不同类型数据的输入。,【例13-5】 使用预定义格式控制符dec、oct、hex及输入流对象cin输入十进制数、八进制数、十六进制数,#include #include “stdafx.h“ #include “std

12、io.h“ #include “iostream.h“ void main() int a,b,c; /接下页,coutdeca; coutdecb; coutdecc; cout“a=“decaendl; cout“b=“octbendl; cout“c=“hexcendl; getchar(); ,程序执行后输入:,输入一个整数(十进制数): 256 输入一个整数(八进制数): 256 输入一个整数(十六进制数): 256 则输出: a=256 b=400 c=100,说明:,(1)在输入数据时,空格作为数据间的分隔符。 (2)输入的数据类型必须与要提取的数据类型一致,否则会出现错误。 (

13、3)在输入数据时,回车换行符(Enter键)起两方面的作用 .,13.1.4流的输入/输出成员函数,1成员函数put() 成员函数put()提供一种将字符送进输出流的方法,使用形式如下: coutput(char c); 或者 coutput(const char c);,【例13-6】成员函数put()用法示例,#include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ void main() char a=A, b=B; cout.put(A).put(a).put(b)endl ; getchar(); 程序执行结果如下: A

14、AB,2成员函数write(),成员函数write()也可提供一种将字符串送到输出流的方法,使用形式如下: coutwrite(const char*str,int n); 其中,str是一个字符指针或字符数组,用来存放一个字符串;n是一个整型数,它用来表示输出显示字符串中字符的个数。若要显示整个字符串,则用strlen(str)。,【例13-7】成员函数write()用法示例,#include #include void Print(char *s) cout.write(s,strlen(s); void main( ) char str=“a string“; cout“The stri

15、ng is“strendl; Print(str); 程序执行结果如下: The string is a string a string,13.1.5重载提取与插入运算符,为了向流插入和提取自定义类型的数据,可以对预定义的插入符和提取符的进行重载。 插入符重载的一般格式如下: ostream &operator(ostream &stream,class_name &obj) 重载代码 return stream; ,补充:,注意:第一个参数是ostream类对象的一个引用,类引用名obj接收待输出的对象,返回值为ostream类对象的引用stream。 提取符重载的一般格式如下: istream &operator(istream &stream,class_name &obj) 重载代码 return stream; 注意:第一个参数是istream类对象的一个引用,stream必须是一个输入流。,13.2文件操作,在C+中有两类文件:外设文件(如键盘、显示器、打印机等)和磁盘文件,前面介绍的标准输入输出流cin、cout都是从外设文件(如键盘、显示器)输入输出数据。本节将讨论如何从磁盘文件输入输出数据,即讨论磁盘文件的建立、打开、读写和关闭操

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号