第8章输入输出流对象解析课件_第1页
第8章输入输出流对象解析课件_第2页
第8章输入输出流对象解析课件_第3页
第8章输入输出流对象解析课件_第4页
第8章输入输出流对象解析课件_第5页
已阅读5页,还剩38页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《解析C++面向对象程序设计》第8章输入/输出流对象7/22/20231第8章输入/输出流对象内容提要8.1螺旋矩阵的输入/输出问题8.2流8.3无格式输入/输出8.4输入/输出的格式控制(重点)8.6自定义类型对象的输入输出8.7文件的输入/输出问题7/22/20232第8章输入/输出流对象提出问题编程输出M*M的螺旋矩阵,要求数据间距与M相同。例如,4*4的螺旋矩阵,其间距为4:123412131451116156109877/22/20233第8章输入/输出流对象分析问题C++没有定义任何用于执行输入或输出的语句,但可以使用C语言中的标准I/O函数printf()和scanf()来解决此问题。7/22/20234第8章输入/输出流对象【例8-2】有如下程序://example8_2.cpp#include<stdio.h>intb=20;floata=5.6;intmain(){

printf("%d\n",a);

scanf("%d",&a);

scanf("%d",&b);

printf("%d\n","abc");return0;}该程序的运行结果为:161061273623↙45↙43499807/22/20235第8章输入/输出流对象printf()与scanf()存在以下两个缺点:1.非类型安全2.不可扩充性7/22/20236第8章输入/输出流对象C++使用类型安全(typesafe)的I/O流操作。不同类型的I/O流操作都是重载的,没有定义过I/O功能的类型不具备I/O操作的能力。C++标准库既可作为标准数据类型数据的I/O,也能用于自定义类型的对象的I/O,这种扩展性是C++最有价值的特点之一。C++用输入输出流来解决这个问题。下面先介绍流的概念。7/22/20237第8章输入/输出流对象流在C++程序中,数据可以从键盘流入到程序中,也可以从程序中流向屏幕或磁盘文件。把数据的流动抽象为流。C++的输入输出操作是由流来处理的。7/22/20238第8章输入/输出流对象流的概念所谓流(stream)是指数据从一个位置流向另一个位置。流是字节的序列。7/22/20239第8章输入/输出流对象输入/输出是一种数据传递操作,可以看作字符序列在计算机内存与外设之间的流动,C++将数据从一个对象到另一个对象的流动抽象为“流”。流动的方向不同,构成输入/输出流,即I/O流。7/22/202310第8章输入/输出流对象I/O流在C++程序中,数据可以从键盘流入到程序,也可以从程序流向屏幕或磁盘文件。从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作。数据的输入/输出就是通过I/O流来实现的。7/22/202311第8章输入/输出流对象I/O流类库的层次结构C++编译系统提供的I/O流类库含有两个平行基类:streambufiosios类有4个直接派生类:输入流类istream输出流类ostream文件流类fstreambase串流类strstreambase7/22/202312第8章输入/输出流对象标准输入/输出流对象标准I/O流预定义了4个流类对象:cin、cout、cerr、clog。操作系统给把外设用文件名的方式进行管理,因此程序设计要访问外设就跟访问文件一样方便。7/22/202313第8章输入/输出流对象I/O分为无格式支持的低级I/O和具有格式支持的高级I/O。无格式支持的低级I/O以基本字节为操作对象,有格式支持的高级I/O把若干字节组合成有意义的单位,如整数、浮点数、字符、字符串及用户自定义类型等等。7/22/202314第8章输入/输出流对象无格式输入/输出无格式输入/输出就是按系统预定义的格式进行的输入/输出。按默认约定,每个C++程序都能使用标准I/O流,如标准输入、标准输出。cin用来处理标准输入,即键盘输入;cout用来处理标准输出,即屏幕输出。它们被定义在iostream.h头文件中。在使用cout和cin前,要用编译预处理命令将所使用的头文件包含到源程序中,其格式如下:#include<iostream.h>7/22/202315第8章输入/输出流对象无格式输出“<<”是预定义的插入运算符,作用在流类对象cout上,实现默认格式的屏幕输出。使用cout输出表达式值到屏幕上的格式如下:

cout<<E1<<E2<<…<<Em;

其中,E1、E2、…、Em为均为表达式。功能是计算各表达式的值,并将结果输出到屏幕当前光标位置处。7/22/202316第8章输入/输出流对象无格式输出cout是ostream流类的对象,它在iostream头文件中作为全局对象定义,其格式如下:ostream

cout(stdout);其中,stdout表示标准输出设备名(屏幕)。在ostream流类中,对应每个基本数据类型定义运算符“<<”重载函数为友元,它们在ostream中声明:ostream&operator<<(ostream&dest,char*pSource);ostream&operator<<(ostream&dest,intsource);ostream&operator<<(ostream&dest,charsource);7/22/202317第8章输入/输出流对象无格式输入“>>”是预定义的提取运算符,作用在流类对象cin上,实现默认格式的键盘输入。使用cin将数据输入到变量的格式如下:

cin>>V1>>V2>>…>>Vn;

其中,V1、V2、…、Vn都是变量。功能是暂停执行程序,等待用户从键盘输入数据,各数据间用空格或Tab键分隔,输入数据类型要与接受变量类型一致,输完后,按回车键结束。7/22/202318第8章输入/输出流对象无格式输入cin是istream流类的对象,它在iostream头文件中作为全局对象定义,其格式如下:istream

cin(stdin);在istream流类,对应每个基本数据类型定义运算符“>>”重载函数为友元,它们同样也在ostream中声明:istream&operator>>(istream&sour,char*pDes);istream&operator>>(istream&sour,intdes);istream&operator>>(istream&sour,chardes);7/22/202319第8章输入/输出流对象输入输出的格式控制C++提供了两种格式化输入/输出方式:一种是用ios类成员函数进行格式化输入输出另一种是用专门的操作符函数进行格式化输入输出7/22/202320第8章输入/输出流对象用ios类成员函数格式化ios类成员函数主要是通过对状态标志、输出宽度、填充字符以及输出精度的操作来完成输入/输出格式化。枚举量定义在ios类中,因此引用时必须包含ios::前缀。使用时应该全部用符号名,绝不要用数值。例8-3示例设置状态标志。7/22/202321第8章输入/输出流对象用ios成员函数对状态标志进行操作

ios类有3个成员函数可以对状态标志进行操作,并且定义了一个long型数据成员记录当前状态标志。这些状态标志可用位或运算符“|”进行组合。用setf函数设置状态标志,其一般格式如下:

longios::setf(longflags)7/22/202322第8章输入/输出流对象用ios成员函数对状态标志进行操作清除状态标志用unsetf函数清除状态标志,其一般格式如下:

longios::unsetf(longflags)7/22/202323第8章输入/输出流对象用ios成员函数对状态标志进行操作用函数flags取状态标志有两种形式,其格式分别如下:

longios::flags()

longios::flags(longflag)例8-4示例对状态标志的操作。7/22/202324第8章输入/输出流对象用ios成员函数设置输出宽度设置输出宽度函数有两种形式,其格式分别如下:

int

ios::width(int

len)

int

ios::width()第一种形式是设置输出宽度,并返回原来的输出宽度;第二种形式是返回当前输出宽度,输出宽度为0。7/22/202325第8章输入/输出流对象设置填充字符填充字符的作用是当输出值不满输出宽度时用填充字符来填充,默认填充字符为空格。它与width()函数配合使用,否则没有意义。设置填充字符函数有两种形式,其格式分别如下:

charios::fill(char

ch)charios::fill()第一种形式是重新设置填充字符,并返回设置前的填充字符;第二种形式是返回当前的填充字符。7/22/202326第8章输入/输出流对象设置输出精度设置浮点数输出精度有两种形式,其格式分别如下:

int

ios::precision(intp)

int

ios::precision()第一种形式是重新设置输出精度,并返回设置前的输出精度;第二种形式是返回当前的输出精度。7/22/202327第8章输入/输出流对象例8-6示例设置输出宽度、填充字符、输出精度。7/22/202328第8章输入/输出流对象用操作符函数格式化为了不直接以标志位的方式去处理流的状态,c++标准库提供了标准的操作符函数专门操控这些状态。这组函数不属于任何类成员,定义在iomanip.h头文件中。将它们用在提取运算符“>>”或插入运算符“<<”后面来设定输入/输出格式,即在读写对象之间插入一个修改状态的操作。其中有些函数没有参数,所以又叫操作符。

7/22/202329第8章输入/输出流对象设置输入/输出宽度函数setw(int)设置输出填充字符函数setfill(int)

设置输出精度函数setprecision(int)设置输入/输出整型数数制函数dec、hex和oct

取消输入结束符函数ws

控制换行操作符endl

代表输出单字符“\0”的操作符ends7/22/202330第8章输入/输出流对象例8-7

用操作符函数示例设置输入/输出宽度。7/22/202331第8章输入/输出流对象解决问题P374-3777/22/202332第8章输入/输出流对象提出问题如何对文本文件和二进制文件进行输入输出操作?7/22/202333第8章输入/输出流对象文件的输入/输出C++把文件看作是一个字符(字节)的序列,即由一个个字符(字节)顺序组成。根据数据的组织形式,可分为ASCII码文件和二进制文件。ASCII码文件又称为文本文件,它的每一个字节存放一个ASCII码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘文件存放。7/22/202334第8章输入/输出流对象由于ASCII码形式与字符一一对应,因此便于对字符进行输出或逐个处理,但它要占用较多的存储空间,若存于二进制文件中,可以节省存储空间,但不能直接输出字符形式。7/22/202335第8章输入/输出流对象C++有三种文件流类:输入/输出文件流类fstream输入文件流类ifstream输出文件流类ofstream它们分别从I/O流中的iostream、istream、ostream流类中派生而来。这些文件流类都定义在fstream.h头文件中,因此,要使用文件流类,必须在程序开始包含该头文件。7/22/202336第8章输入/输出流对象C++中进行文件操作的一般步骤

为文件定义一个流类对象;使用open()函数建立(或打开)文件。如果文件不存在,则建立该文件;如果磁盘上已存在该文件,则打开该文件;进行读写操作。在建立(或打开)的文件上执行所要求的输入/输出操作。一般来说,在内存与外设的数据传输中,由内存到外设称为输出或写,反之则称为输入或读;使用close()函数关闭文件。当完成操作后,应把打开的文件关闭,避免误操作。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论