![第八章-运算符重载及流类库(2011-3-28)_第1页](http://file4.renrendoc.com/view/cc535ccb895b2ac9349a49a4582660dc/cc535ccb895b2ac9349a49a4582660dc1.gif)
![第八章-运算符重载及流类库(2011-3-28)_第2页](http://file4.renrendoc.com/view/cc535ccb895b2ac9349a49a4582660dc/cc535ccb895b2ac9349a49a4582660dc2.gif)
![第八章-运算符重载及流类库(2011-3-28)_第3页](http://file4.renrendoc.com/view/cc535ccb895b2ac9349a49a4582660dc/cc535ccb895b2ac9349a49a4582660dc3.gif)
![第八章-运算符重载及流类库(2011-3-28)_第4页](http://file4.renrendoc.com/view/cc535ccb895b2ac9349a49a4582660dc/cc535ccb895b2ac9349a49a4582660dc4.gif)
![第八章-运算符重载及流类库(2011-3-28)_第5页](http://file4.renrendoc.com/view/cc535ccb895b2ac9349a49a4582660dc/cc535ccb895b2ac9349a49a4582660dc5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章运算符重载及流类库C++程序设计1/36本章主要内容运算符重载流类库文件流2/36运算符重载 C++语言允许程序员重新定义已有的运算符,使其能按用户的要求完成一些特定的操作,这就是所谓的运算符重载。 运算符重载与函数重载相似,其目的是设置某一运算符,让它具有另一种功能,尽管此运算符在原先C++语言中代表另一种含义,但他们彼此之间并不冲突。C++会根据运算符的位置辨别应使用哪一种功能进行运算。
3/36运算符重载 C++内部任何运算都是通过函数来实现的。运算符重载的实质就是函数重载。 在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。4/36运算符重载 运算符的重载形式有两种:重载为类的成员函数和重载为类的友元函数。 运算符重载为类的成员函数的语法形式如下:<函数类型>operator<运算符>(<形参表>){ <函数体>;} 运算符重载为类的友元函数的语法形式如下:friend<函数类型>operator<运算符>(<形参表>){ <函数体>;}5/36例9.16/36P186<<、>>和++运算符重载实例插入符函数的一般形式为:ostream&operator<<(ostream&函数的流,类名&对象名){……//函数代码return函数的流;}提取符函数的一般形式为:istream&operator>>(istream&函数的流,类名&对象名){……//函数代码return函数的流;}7/36例9.28/36例9.3函数调用方式;直接使用运算符9/36例9.4
10/36类运算符和友元运算符的区别P190如果运算符所需的操作数,尤其是第一个操作数希望进行隐式类型转换,则该运算符应该通过友元来重载。另一方面,如果一个运算符的操作需要修改类对象的状态,则应当使用类运算符,这样更符合数据封装的要求。但参数是使用引用还是对象,则要根据运算符在使用中可能出现的情况来决定。11/36friendcomplexoperator+(形参1,形参2){……//函数体定义}关键字friend把complexoperator+(形参1,形参2)说明成类的友元,使得它能够访问类complex的私有数据。形参可以都是对象或者对象的引用;形参也可以一个为对象一个为引用,这要视具体问题而定。12/36例9.513/36例9.614/36流类库在C++中,输入输出操作是由“流”来处理的。所谓流,它是C++的一个核心概念,数据从一个位置到另一个位置的流动抽象为流。当数据从键盘或磁盘文件流入到程序中时,这样的流称为输入流,把输入数据来自的地方称为“源”当数据从程序中流向屏幕或磁盘文件时,这样的流称为输出流,把接收输出数据的地方称为“目标”15/36流类库当流被建立后就可以使用一些特定的操作从流中获取数据,如输入操作;也可向流中添加数据,如输出操作。从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作。执行输入、输出的类体系叫做流类提供这个流类实现的系统库叫做流类库16/36流类库C++针对流的特点,构造了功能强大的输入输出流库iosistreamostreamiostreamstreambufios类用来提供一些关于对流状态进行设置的功能,它是一个虚基类,其它类都是从这个派生而来但streambuf不是ios类的派生类,在类ios中只是有一个指针成员,指向streambuf类的一个对象。streambuf类是用来为ios类及其派生类提供对数据的缓冲支持。缓冲,是指系统在主存中开辟一个专用的区域用来临时存放输入输出信息,这个区域称为缓冲区。有了缓冲以后,输入输出时所占用的CPU时间就大大减少了,提高了系统的效率。因为只有当缓冲区满时,或当前送入的数据为新的一行时,系统才对流中的数据进行处理,称为刷新。itream和ostream类均是ios的公有派生类,前者提供了从流中提取数据的有关操作,后者则是提供了向流中插入数据的有关操作。iostream类是itream和ostream类公有派生的,该类并没有提供新的操作,只是将itream和ostream类综合在一起,提供一种方便。17/36流类库P194为了方便用户对基本输入输出流进行操作,只要在程序中包含头文件iostream,就可以使用C++提供的四个预定义的标准流对象:cin、cout、cerr和clog,它们都是std名称空间的流对象。cin是istream类的对象,用处理可定向得标准输入,即键盘输入。cout是ostream类的对象,用处理标准输出,即屏幕输出。cerr和clog都是ostream类的对象,用来处理标准出错信息,并将信息显示在屏幕上。在这四个标准流对象中,除了cerr不支持缓冲(发送给它的内容立即被输出到屏幕,并且不能被重定向到其它地方),其余三个都带有缓冲区。标准流通常使用提取运算符“>>”和插入运算符“<<”来进行输入输出操作的,而且系统还会自动地完成数据类型的转换。18/36
一种具体的物理设备,比如说键盘联接起来。C++的流类库预定义的4个流所联接起的具体设备为:cin
与标准输入设备相联接cout
与标准输出设备相联接cerr
与标准错误输出设备相联接(非缓冲方式)clog与标准错误输出设备相联接(缓冲方式)19/36文件流C++将文件看作是由连续的字符(字节)的数据顺序组成的。根据文件中数据的组织方式,可分为文本文件(ASCII文件)和二进制文件。文本文件中每一个字节用以存放一个字符的ASCII码值,而二进制文件是将数据用二进制形式存放在文件中,它保持了数据在内存中存放的原有格式。无论是文本文件还是二进制文件,都需要用文件指针来操纵。一个文件指针总是和一个文件所关联的,当文件每一次打开时,文件指针指向文件的开始,随着对文件的处理,文件指针不断地在文件中移动,并一直指向最新处理的字符(字节)位置。20/36P194ios
是…虚基类21/3622/36文件流为方便用户对文件的操作,C++提供了文件操作的文件流库filebufofstreamifstreamfstreamiosistreamostreamiostreamstreambufifstream类是从istream类公有派生而来,用来支持从输入文件中提取数据的各种操作ofstream类是从ostream公有派生而来,用来实现把数据写入到文件中的各种操作。fstream类是从iostream类公有派生而来,提供从文件中提取数据或把数据写入到文件的各种操作。filebuf类从streambuf类派生而来,用来管理磁盘文件的缓冲区,应用程序中一般很少涉及到该类。23/36文件流P199C++中文件输入/输出的基本过程1.在程序中要包含头文件fstream.h。2.创建一个流。ifstreamiFile;ofstreamoFile;fstreamioFile;3.将这个流与文件相关联,即打开文件。voidopen(constchar*filename,intmode,intaccess);4.文件的读写操作。5.关闭文件。iFile.close();oFile.close();参照P200【例9.9】24/36P19625/36P197
26/36例9.727/36例9.928/36文件流输出流的open函数,即打开文件voidopen(constchar*filename,intmode,intfilebuf::openprot);文件打开方式说明Ios_base::in以输入方式打开文件,即读文件(ifstream类对象默认方式)Ios_base::out以输出方式打开文件,即写文件(ofstream类对象默认方式)Ios_base::app以添加方式打开文件,新增加的内容添加在文件尾Ios_base::ate以添加方式打开文件,新增加的内容添加在文件尾,但下次添加时则添加在当前位置Ios_base::trunc如文件存在就打开并清除其内容,如不存在就建立新文件Ios_base::binary以二进制方式打开文件(默认为文本文件)Ios_base::nocreate打开已有文件,若文件不存在,则打开失败Ios_base::noreplace若打开的文件已经存在,则打开失败文件名访问模式打开方式29/36文件流filebuf::openport 共享方式,默认的方式filebuf::sh_none 独占方式,不允许共享filebuf::sh_read 允许读共享filebuf::sh_write 允许写共享30/36文件流
关闭文件时,系统把该文件相关联的文件缓冲区中的数据写到文件中,保证文件的完整,收回与该文件相关的内存空间,可供再分配,把磁盘文件名与文件流对象之间的关联断开,可防止误操作修改了磁盘文件。如又要对文件操作必须重新打开。三个文件流类各有一个关闭文件的成员函数:voidifstream::close();voidofstream::close();voidfstream::close();使用很方便,如:iFile.close();oFile.close(); iofile.close();31/36文件流对一个流对象进行输入、输出操作时,可能会产生错误,一般在进行文件的操作时,需要进行相应的错误判断if(cin.good())cin>>data;表示没有错误和文件没有结束时,才从文件获取数据32/36文件流处理错误的成员函数及功能如下:成员函数功能bad()如果进行非法操作,返回true,否则返回falseclear()清除内部错误状态eof()若文件读到末尾,返回true,否则返回falsegood(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2031年中国铁基/铜基粉末冶金含油轴承行业投资前景及策略咨询研究报告
- 2025至2030年中国预制混凝土构件数据监测研究报告
- 2025至2030年中国螺旋波节管换热器数据监测研究报告
- 2025至2030年中国啤酒花数据监测研究报告
- 2025至2030年中国六角蜂窝斜管数据监测研究报告
- 2025至2030年中国LED标志字牌数据监测研究报告
- 2025年中国高速翅片冲压全自动生产线市场调查研究报告
- 2025年中国离心式风幕机市场调查研究报告
- 2025年中国电子火花机市场调查研究报告
- 2025年中国电动助力车用铅酸蓄电池市场调查研究报告
- 2025民政局离婚协议书范本(民政局官方)4篇
- 2024年03月四川农村商业联合银行信息科技部2024年校园招考300名工作人员笔试历年参考题库附带答案详解
- 小学一年级数学上册口算练习题总汇
- 睡眠专业知识培训课件
- 润滑油知识-液压油
- 2024年江苏省中医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 临床思维能力培养
- 人教版高中物理必修第三册第十章静电场中的能量10-1电势能和电势练习含答案
- 《工程勘察设计收费标准》(2002年修订本)
- 中国宗教文化 中国古代宗教文化的特点及现代意义
- 2024年四川省巴中市级事业单位选聘15人历年高频难、易错点练习500题附带答案详解
评论
0/150
提交评论