版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
14.1流及流类库的层次结构在C++中,流(Stream)是一种抽象,指的是计算机内数据从源端流向目的端的高度抽象。所谓的源端或目的端是指计算机的屏幕、内存、文件等一些输入/输出设备。C++中有一些类就是处理计算机各种设备使其成为流的源端或目的端,这些设备能够源源不断地把数据“插入”流中或从流中把数据提取出来,这样的类就是流类。我们把从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作。返回下一页14.1流及流类库的层次结构C++的流类中有两个最高基类,一部分继承自streambuf类,另一部分继承自ios类。这两种类所派生的类分别负责不同的操作,streambuf类及其派生类用来处理和计算机中各种设备接触的操作,通常和计算机的硬件有关;ios类及其派生类则用来处理计算机中输入及输出的操作,如文件的读写、屏幕的输出、键盘的输入等。图14-1示出了C++语言流的层次结构。表14-1是这些类的简要说明和类所在的头文件名。依据数据的读写,流分为输入流和输出流。因为文件流和内存变量的交互是相对的,这里的输入、输出是相对于内存变量的,给予内存变量的称之为输入,否则称之为输出。返回上一页14.2输出流及常用的成员函数C++有三个重要的输出流:ostream类的派生类ostream_withassign支持标准设备的预定义,ofstream类支持磁盘文件系统输出,ostrstream类支持字符串流类的操作。一般通过构造输出流对象来对文件进行操作。(1)使用默认构造函数,然后调用open成员函数。ofstreammyFile;//说明一个静态的输出文件流对象myFile.open(“filename”,iosmode);//打开文件,使流对象与文件建立联系或者ofstream*pmyFile=newofstrean;//建立一个动态的输出流对象pmyFile->open(“filename”,iosmode);//打开文件,使流对象与文件建立联系返回下一页14.2输出流及常用的成员函数(2)在创建流对象的同时给出文件名和操作模式。ofstreammyFile(“filename”,iosmode);用流类定义的对象称为流对象。一个输出流对象是信息流动的目的。14.2.1标准设备流对象ostream类通过其派生类ostream_withassign预定义的标准流对象有:cout——标准输出流对象,显示器。cerr——标准错误输出流对象,没有缓冲,发送给它的内容立即直接输出,显示器。clog——类似于cerr,有缓冲,缓冲区满时输出,显示器。返回下一页上一页14.2输出流及常用的成员函数14.2.2cout流对象、插入操纵符和控制格式C++中的输出流对象cout和插入操纵符“<<”用于标准设备输出,还可以和width成员函数联合用于控制输出宽度。14.2.3put和write成员函数输出流ostream的成员函数put()用于输出一个字符,其格式为:流对象名.put(charch);put函数的功能是把一个字符写到输出流中。语句:“cout<<'B';”和“cout.put('B');”功能基本相同。但是第一条语句受该流的格式化参数的影响,即是在此前设置的有关操作对本语句依然起作用。返回上一页14.3输入流及常用的成员函数C++有三个重要的输入流:istream用于顺序文本模式输入,ifstream支持磁盘文件的输入,istrstream用于输入字符串的操作。标准输入设备cin有get、getline和read等成员函数,“>>”是输入操作的提取操纵符。一般通过构造输入流对象来对文件进行操作。其方法有二:(1)使用默认构造函数建立对象,调用open成员函数打开文件。例如:ifstreammyFile;//建立一个静态的文件流对象myFile.open("filename",iosmode);//iosmode模式打开文件filename返回下一页14.3输入流及常用的成员函数或者ifstream*pmyFile=newifstream;//建立一个动态的文件流对象,pmyFile为指针pmyFile->open("filename",iosmode);//用对象指针调用open函数,打开文件(2)在创建文件流对象时指定文件名和模式,在构造函数中打开文件。14.3.1cin流对象和提取操纵符cin是istream的类的对象,“>>”是提取操纵符,其联合应用主要用于从键盘上进行输入操作。返回下一页上一页14.3输入流及常用的成员函数14.3.2get和getline成员函数istream类的成员函数get可以读取一个字符或一个字符串,对空格、制表符、换行符和回车当作字符读入。它有三种格式:intget()流对象名.get(char&ch);流对象名.get(char*str,intlength,chardelimiter=’结束字符’);返回下一页上一页14.3输入流及常用的成员函数在读取一个字符串时,在参数的控制下读取若干字符,结束读入操作的条件有三个:(1)参数length,表示读入的字符数量不超过length−1个字符。(2)参数delimiter,默认值是换行符,指定字符时,遇到指定字符将结束读入。(3)遇到文件结束符EOF时结束读入。返回上一页14.3输入流及常用的成员函数14.3.3read成员函数istream类的成员函数read是从输入流中读入指定数量的字符,其格式为:流对象名.read(char*str,intlength);其中str用于存放读入字符的指针,length用于指定要读入字符的数量。返回上一页14.4文件的打开与关闭14.4.1文件的打开C++的文件流分为三类:输入流ifstream、输出流ofstream和输入/输出流fstream。相应的操作必须声明相应的流对象。例如:ifstreamifile;//声明ifile是一个输入流对象ofstreamofile;//声明ofile是一个输出流对象fstreamiofile;//声明iofile是一个输入输出流对象文件的打开操作由open函数完成,在声明了流对象后,就可以使用open函数打开相应的文件。文件的被打开就是在流与文件之间建立了一个连接。返回下一页14.4文件的打开与关闭open函数的格式为:对象名.open(constchar*filename,intmode,intprot=filebuf::openprot);其中,filename是文件名,可以包含路径名。mode是文件的打开模式,mode的取值可以是以下的取值之一或组合。ios::in以读的方式打开文件ios::out以写的方式打开文件ios::ate打开文件并将文件指针定位于文件尾ios::app以添加方式打开文件返回下一页上一页14.4文件的打开与关闭ios::trunc如果文件存在则清空源文件ios::nocreate如果文件不存在则打开操作失败ios::noreplace如果文件存在则打开操作失败ios::binary以二进制方式打开文件对于ifstream流,mode的默认方式为“ios::in;”对于ostream流,mode的默认方式为“ios::out”;prot决定了文件的访问方式,其取值为:0普通文件1只读文件2隐含文件3系统文件返回下一页上一页14.4文件的打开与关闭需要注意如下的一些应用方法。(1)建立一个文件,若该文件存在则清空旧的版本。ostreamofile(“FILENAME”);//默认模式是ios::outofstreamofile(“FILENAME”,ios::out);//与上语句等效(2)添加记录到一个现存文件中,若文件不存在则建立一个新文件。ofstreamofile(“FILENAME”,ios::app);(3)使用同一个流先后打开不同的文件。ofstream.offile();返回下一页上一页14.4文件的打开与关闭ofile.open(“FILE1”,ios::in);//打开文件FILE1…//向文件FILE1输出ofile.close();//关闭FILE1ofile.open(file2,ios::in);//打开文件FILE2…//向文件FILE2输出ofile.close();//关闭FILE2。当对象ofile离开它的作用域时便消亡返回下一页上一页14.4文件的打开与关闭14.4.2文件的关闭打开文件进行相应的操作之后,应该关闭该文件。关闭文件的close函数的格式如下:对象名.close();close函数也是流中的成员函数,该函数没有返回值。其功能是将缓冲区中的内容刷新,撤销流与文件之间的连接。当流对象的生命期结束之后,相应的析构函数也将关闭文件。返回上一页14.5文本文件的读/写文本文件又称为ASCII码文件。处理文本文件时系统将自动地做一些字符的转换,例如:输出换行符0x0A时将转换为0x0D和0x0A两个字符存入文本文件,在读出时,也会将回车和换行两个字符合并为一个换行字符。这样在内存中的字符与写入文件中的字符之间就不是一一对应的关系。文本文件的结束符为0x1A。文本文件的写出操作首先要创建输出文件流对象,返回14.6二进制文件的读/写二进制文件的写出要先创建输出文件流对象。然后可以通过“tfile.getline(str,100);”语句进行读入操作。(详见书上例题)返回14.7文件的随机读/写C++语言提供了对文件的随机访问的功能,随机访问操作适合于二
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿教师早期教育方案设计指南
- 年度员工生日庆祝活动通知函3篇
- 5G工业互联网应用整体
- 6G产业化与安全测试
- 大数据隐私保护安全算法与区块链
- 人工智能图像信息增强处理训练
- 企业控制风险管理流程指南
- 地下智能管廊感知监测维护诊断一体化
- 湖北襄阳市第四中学2025-2026学年高二下学期6月阶段检测语文试题 含解析
- 2026年企业ESG报告编制实务与合规指南
- 江苏省泰州市姜堰区2025-2026学年七年级下学期6月期末数学试卷(含答案)
- 2026年江西省中考数学试题(含答案及逐题详解)
- 2026年长沙商贸旅游职业技术学院单招职业倾向性测试题库及参考答案详解
- 2026年湖南普通高中学业水平选择性考试历史真题【含答案】
- 2026甘肃省农垦集团有限责任公司招聘生产技术人员78人备考题库及1套完整答案详解
- 2026四川富润企业重组投资有限责任公司应届毕业生招聘4人备考题库含答案详解
- 电梯安装工程技术资料-电梯竣工资料
- 2026年国开电大法学本科《中国法律史》期末纸质考试试题及答案
- 东方福利网人才测评题
- 人教版六年级下册语文《期末》考试卷及答案下载
- 2026年广东广州市地理生物会考试题题库(答案+解析)
评论
0/150
提交评论