C++面向对象程序设计(第二版)-第八章_数据流与文件的输入输出

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C++面向对象程序设计(第二版)主编曹静中国水利水电出版社C++面向对象程序设计(第二版)第八章数据流与文件的输入/输出2020年1月11日星期六C++面向对象程序设计第八章数据流与文件的输入/输出8.1I/O流的概念8.2数据流的控制8.3文件的输入/输出项目设计7校园信息管理系统中的数据存储2020年1月11日星期六C++面向对象程序设计8.1I/O流的概念流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象。程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。2020年1月11日星期六C++面向对象程序设计8.2数据流的控制8.2.1数据流的格式控制8.2.2常用的输入/输出函数8.2.3数据流的错误侦测2020年1月11日星期六C++面向对象程序设计8.2.1数据流的格式控制插入()和提取()运算符是为所有标准C++数据类型定义的,其作用是向流中传送和读取数据。插入和提取运算符与预先定义的操作符一起工作,用来控制输入和输出格式。1.输出宽度为了调整输出时的显示宽度,可以通过调用width成员函数为每个项(item)指定输出宽度或在流中放入setw操纵符。2020年1月11日星期六C++面向对象程序设计8.2.1数据流的格式控制2.对齐方式输出流的默认对齐方式为文本右对齐,程序中可以用setiosflags和resetiosflags操作符重设对齐方式。3.精度使用setprecision操作符改变精度,该操作符有两个标志,ios::fixed和ios::scientific。4.进制可以用dec、oct和hex操纵符设置输入和输出的默认进制。2020年1月11日星期六C++面向对象程序设计8.2.2常用的输入/输出函数常用istream成员函数包含:intistream::get()如果输入流包括附加的数据,函数取得并返回下一个字符;否则它返回EOF。istream&istream::get(char&c)如果输入流包括附加的数据,函数取得并将下一个字符分配给c;否则就是没有定义对c的作用。返回一个对*this(调用对象)的引用。2020年1月11日星期六C++面向对象程序设计8.2.2常用的输入/输出函数istream&istream::get(chars[],intn,chardelim='\n')从输入流获取字符并将它们分配给s直到下面的一个条件发生:取得n-1个字符,没有输入字符了,或者下一个接收的字符的值为delim。istream&istream::getline(chars[],intn,chardelim='\n')从输入流获取字符并将它们分配给s直到下面的一个条件发生:取得n-1个字符,没有输入字符了,或者下一个接收的字符的值为delim。2020年1月11日星期六C++面向对象程序设计8.2.2常用的输入/输出函数intistream::peak()如果输入流包括附加的数据,函数返回下一个接收的字符;否则它返回EOF。istream&istream::unget(charc)字符c被送到输入流。它将是下一个要接收的字符。函数返回一个对*this的引用。库iostream还提供对ios成员函数的访问,一些程序在输入流中检测文件尾。boolios::eof()如果流中达到文件尾则返回真;否则函数返回假。2020年1月11日星期六C++面向对象程序设计8.2.2常用的输入/输出函数库iostream还提供两个类似get()和getline()的ostream成员函数。ostream&ostream::put(charc)将字符c插入输入流中。函数返回一个对*this的引用。ostream&ostream::write(constchars[],intn)将s中的n个字符插入到输入流中。空字符也是有效的。函数返回一个对*this的引用。库iostream还提供常用的ostream成员函数。ostream&ostream::flush()强制任何没有完成的操作符插入完成。函数返回一个对*this的引用。2020年1月11日星期六C++面向对象程序设计8.2.3数据流的错误侦测流cerr和clog把显示输出到默认错误日志上,该日志通常是控制台显示器。对流cerr的每个插入请求应该立即送出显示。下面给出几个错误消息的例子:cerr系统将在10秒后重起!\n;cerr输入值无效,请重新输入!\n;2020年1月11日星期六C++面向对象程序设计8.2.3数据流的错误侦测如果出于效率的缘故,则有必要缓冲错误和系统状态消息,这样就应该使用带缓冲的错误流clog。像cerr一样,clog通常是定向到显示器。下面给出几个样例:clogUserName成功登陆!\n;clog有新邮件!\n;2020年1月11日星期六C++面向对象程序设计8.3文件的输入/输出8.3.1fstream类8.3.2格式化文字模式的文件I/O8.3.3二进制模式的文件I/O8.3.4文件指针的使用2020年1月11日星期六C++面向对象程序设计8.3.1fstream类C++里负责文件输入/输出的类主要有ifstream(文件输入)、ofstream(文件输出)以及fstream(文件输入/输出)。所谓文件的I/O(输入/输出)是指以程序为主的角度而言,文件打开为输入状态时(in),表示程序将由文件读入数据;文件打开为输出状态时(out),表示程序将输出数据至文件。我们通常将数据由文件输入到程序称之为读取,程序将数据输出到文件称之为写入。2020年1月11日星期六C++面向对象程序设计8.3.1fstream类fstream类可以用于将数据写入文件,或读取文件的数据。要使用fstream类执行文件的I/O时,首先必须先定义一个fstream类的对象。例如:fstreamfile;//定义一个fstream对象利用fstream所提供的open成员函数,打开一个文件。传入open函数的参数有两个,一个传入欲打开的磁盘文件的名称,另一个传入打开该文件的模式参数。file.open(MyFile.txt,ios::in);//在读取模式下打开MyFile.txt文件2020年1月11日星期六C++面向对象程序设计8.3.1fstream类表8-1文件流的文件打开模式模式参数功能ios::in文件打开为读取(输入)状态,此为istream类的默认模式参数ios::out文件打开为写入(输出)状态,此为ostream类的默认模式参数ios::ate打开一个现存文件,从文件结尾处读取(输入)或写入(输出)ios::app打开一个输出文件从文件结尾写入(输出)数据ios::trunc打开一个文件,如果它已经存在,就删除其中原有的内容ios::nocreate如果一个文件存在则打开它,否则该操作失败ios::noreplace如果一个文件不存在则作为新文件打开它;如果文件已存在,则该操作失败ios::binary以二进制模式打开一个文件,默认是文本模式2020年1月11日星期六C++面向对象程序设计8.3.1fstream类表8-2文件处理函数函数功能说明open(filename,mode)以mode模式打开名为filename的文件close()关闭文件is_open()检查文件是否为打开状态,是则返回真,否则返回假write(str,size)将str数组中size个字符写入到文件中read(str,size)从文件中读取数据至文件结尾,并设定给str数组,但至多不超过size个字符2020年1月11日星期六C++面向对象程序设计8.3.1fstream类C++的文件I/O模式分为两种,一种为格式化文字模式,另一种为二进制模式,默认的文件I/O模式为文字模式。当使用格式化文字模式时,输出至文件的内容将被储存为字符,因此,格式化文字模式适合储存字符或字符串。如果以二进制的方式处理数字,不论是储存的方式,还是占有文件空间的方式都与其储存在内存中的方式相同,因此,在储存数字时使用二进制模式是比较合适的。2020年1月11日星期六C++面向对象程序设计8.3.2格式化文字模式的文件I/O文件的最小单位为字符,由字符组成一个字段,好几个字段组成一个记录,而一个文件则由好几笔记录组成。将数据输入输出到文件中,除了可以使用write和read函数外,还可以使用“”和“”运算符,而所有在8.2.1节中提及的格式控制方法,均可以在文件I/O中使用。2020年1月11日星期六C++面向对象程序设计8.3.3二进制模式的文件I/O在二进制模式下,文件的I/O将利用write和read函数将所有数据以字节形式储存至文件里。对于原本就是字符的数据,并不需要转型,即可读取/写入到文件里;但对于数字型的数据,则必须转为字符指针,然后传入write和read函数。2020年1月11日星期六C++面向对象程序设计8.3.4文件指针的使用文件指针是文件读取/写入数据时插入或输出的位置。文件指针有两种,一个是写入指针,另一个是读取指针。当文件被打开时,这两个指针都将被设定指向文件的起始处。在ios类里,定义了三个特定的文件指针。通过指针函数与特定的指针的配合使用,可供在处理文件I/O时移动文件指针之用。这三个位移指针分别是ios::beg(文件开头)、ios::end(文件结尾)、ios::cur(当前的指针位置)。2020年1月11日星期六C++面向对象程序设计8.3.4文件指针的使用表8-3文件指针函数文件指针函数功能说明seekg(pos,seek_dir)设定文件读取(输入)指针到距离文件某一特定指针pos个字节的位置。特定指针由seek_dir指定,有以下三种ios::beg(文件起始)、ios::cur(当前文件指针的位置)或ios::end(文件结尾)pos=tellg()返回当前文件读取指针的位置seekp(pos,seek_dir)设定文件写入(输出)指针到距离文件某一特定指针pos个字节的位置。特定指针由seek_dir指定,有以下三种ios::beg(文件起始)、ios::cur(当前文件指针的位置)或ios::end(文件结尾)pos=tellp()返回当前文件写入指针的位置2020年1月11日星期六C++面向对象程序设计项目设计7校园信息管理系统中的数据存储1设计题目校园信息管理系统中的数据存储2设计概要要求掌握面向对象程序设计方法,I/O流的概念,以及如何利用文件存储对象。3系统分析4功能模块设计2020年1月11日星期六C++面向对象程序设计3系统分析现在校园信息管理系统已经能够完成人员信息的输入、显示和分析等一系列工作,但是现在的程序并不能将信息长期保存,所以,将数据永久的保存是校园信息管理系统必须实现的功能。将文件读写的功能加入到当前的校园信息管理系统中来,以实现信息的长期保存。2020年1月11日星期六C++面向对象程序设计4功能模块设计在设计person、student和teacher类的时候,已经添加了用来将数据写入文件和读出文件的函数:voidSave(ofstream*ofile);voidLoad(ifstream*ifile);实现对象实例的存储也就是对其中数据的存储,对象中的数据就是其每个成员变量的取值,将它们的值全部存入文件就能实现对象的存储。

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功