- 1、本文档共61页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 运算符重载及流类库;9.1 运算符重载
9.1.1 重载对象的赋值运算符
9.1.2 运算符重载的实质
9.1.3 ,和++运算符重载实例
9.1.4 类运算符和友元运算符的区别
9.1.5 下标运算符“[]”的重载
9.2 流类库
9.2.1 流类库的基础类
9.2.2 默认输入输出格式控制
9.2.3 使用ios_base类
9.3 文件流
9.3.1 使用文件流
9.3.2 几个典型成员函数
9.3.3 文件存取综合实例;9.1.1 重载对象的赋值运算符
编译器在默认情况下为每个类生成一个默认的赋值操作,用于同类的两个对象之间相互赋值。其默认含义为逐个为成员赋值,即将一个对象的成员值赋给另一个对象相应的成员。
这种默认赋值在有些类中可能是不正确的。
;如,假设类str的数据成员为“char *st”,即;由于存在“s1=s2;”语句,s1中的st指向world,也就是说s1.st和s2.st指向内存中的同一块区域。这样当s1和s2的生存期结束时,会被析构,而会导致同一块内存被释放两次,从而出现错误。;此时,成员函数必须使用引用参数。
C++中的关键字“operator”和运算符一起使用就表示一个运算符函数,上面方法中的“赋值操作”可以用“operator=”来表示。
应将“operator=”从整体上视为一个函数名。上述函数的声明为:
str operator=(str);
在类体外定义时为:
str str::operator=(str a){…//函数休};当str类定义了赋值运算符函数后,“operator=”是类的成员函数名,对象s1调用这个成员函数(参数为s2)的形式为:
s1.operator=(s2);
上述调用是成员函数正规的调用方法,系统允许直接写成如下形式:
s1=s2;
被C++编译器解释为
s1.operator=(s2);
由于函数返回一个引用,所以可以连用,即:
s1=s2=s3;
被C++编译器解释为
s1.operator=(s2.operator=(s3));;例9.1 完整实现str类的例子。;说明:
有两个赋值运算符重载函数:
str str::operator=(str); //用于对象之间的赋值
s2=s1=s3; //调用此函数
str str::operator=(char*);//用于字符串对对象的赋值
s3=“here”;//调用此函数
上述赋值运算符的使用可改成正规成员函数调用的形式,如
s2.operator=(s1.operator=(s3)); //s2=s1=s3;
s3.operator=(“here”); //s3=“here”;
;9.1.2 运算符重载的实质
运算???重载的例子:1/2=0, 1.0/2.0=0.5。
任何运算符都是通过函数实现的。如2+3,C++将这个表达式解释为函数调用的形式:
operator+(2,3);
然后去找原型为operator+(int,int)的函数来实现表达式的计算。
运算符的重载实质上就是函数的重载。
运算符重载需要关键字operator。operator与运算符构成一个运算符函数名,如operator+()。我们可以为自己定义的类型来重载operator+(),从而实现运算符的重载。;由于用户为某类型定义的重载运算符一般需要能够访问该类型的私有成员,所以只能将运算符重载为该类型的成员函数或该类型的友元。为了区别这两种情况,将作为类成员函数的重载运算符称为类运算符,而将作为类友元的重载运算符称为友元运算符。
不是所有运算符都可以重载,不能重载的运算符有:“.” ,“::”,“.*”和“? :”。(注意书上错误)
“sizeof”和“#”不是运算符,所以不能重载。
“=”,“()”,“[]”,“-”这四个运算符只能用类运算符重载。;9.1.3 ,和++运算符重载实例
插入运算符 “” 和提取运算符“”也可以重载。
两个运算符的特点是在流对象的后面,所以可以作为“流”的成员函数,但流是标准库,不允许修改,不能是流的成员。操作对象不在运算符的左边,不能做为操作对象类的成员函数。要用该运算符输出对象,必须能访问对象的私有成员,所以它们必须作为类的友元重载。; output是类ostream对象的引用,它是cout的别名。调用此函数时,output引用cout。
第二个参数可以是对象或引用,推荐使用引用。; input是类istream对象的引用,它是cin的别名。调用此函数时,input引用cin。
由于调用此函数要改变对象的值,所以第二个参数必须是对象引用。;注意:
如果将返回类型改成void,这时函数体中没有返回值。这时以下语名
您可能关注的文档
- 第2章信用证的开立、审核与修改练习(学生)讲述.ppt
- 第2章仿真的原理讲述.ppt
- 第2章人体形态评定讲述.ppt
- 第2章信令系统9讲述.ppt
- 第2章+第4节+航空电子系统讲述.ppt
- 第2章催化剂与催化作用基本知识讲述.ppt
- 第6章氡来源及性质详解.ppt
- 第6章-分支限界v1.0详解.pptx
- 第九章-煤炭燃烧详解.ppt
- 第2章免疫球蛋白讲述.ppt
- 执业药师之《药事管理与法规》检测卷讲解含答案详解(必威体育精装版).docx
- 执业药师之《药事管理与法规》全真模拟模拟题及答案详解(全国通用).docx
- 2025年执业药师之《西药学综合知识与技能》模拟试题附参考答案详解(突破训练).docx
- 2025年执业药师之《西药学综合知识与技能》考前冲刺模拟题库含答案详解(培优a卷).docx
- 2025年执业药师之《西药学综合知识与技能》真题精选附答案详解(名师推荐).docx
- 执业药师之《药事管理与法规》强化训练模考卷带答案详解.docx
- 2025年执业药师之《西药学综合知识与技能》考前冲刺测试卷包附参考答案详解(b卷).docx
- 2025年执业药师之《西药学综合知识与技能》模考模拟试题及参考答案详解(夺分金卷).docx
- 2025年执业药师之《西药学综合知识与技能》真题含答案详解【b卷】.docx
- 2025年执业药师之《西药学综合知识与技能》考前冲刺模拟题库带答案详解(b卷).docx
最近下载
- 学前教育科学研究方法教学资料-教学参考1-11章.doc VIP
- 感术行动、2024版国家感控监测指标解读试题.pdf VIP
- 〖精编〗初一英语完形填空专题练习附答案共50篇.doc VIP
- 米家小米智能门锁 E30使用说明书.pdf
- 2025浙江温州市瓯海区数安港管理服务中心招聘政府雇员6人笔试备考题库及答案解析.docx VIP
- 围栏销售合同协议.docx VIP
- 湘教版七年级地理上册知识点总结.docx VIP
- 2013年考研英语二真题解析.pdf VIP
- T_CESA 1230—2022_工业AI视觉外观检测系统通用技术规范.pdf VIP
- 2024-2025学年初中化学沪科版(五四学制)(2024)八年级全一册教学设计合集.docx VIP
文档评论(0)