- 1、本文档共61页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 运算符重载及流类库 主讲:冯传胜 Email:fcs@ 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 运算符重载 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。 由于调用此函数要改变对象的值,所以第二个参数必须是对象引用。 注意: 如果将返回
您可能关注的文档
- 冠梁施工技术交底记录剖析.doc
- 在高职教育诊断与改进工作会上的讲话(马必学)剖析.ppt
- 第07章__HTML5的数据存储讲解.ppt
- 函数的零点和方程的根课件(人教A版必修一)剖析.ppt
- 第07章广域网技术讲解.doc
- 第08章 信息系统规划讲解.pptx
- 第08章 HTTP应用编程讲解.ppt
- 第08章、语法制导翻译讲解.ppt
- 划定矿区范围申请报告1剖析.doc
- 第09章 信息系统开发方法讲解.pptx
- 2025年中国铸管沥青漆喷涂机市场调查研究报告.docx
- 2025至2031年中国聚四氟乙割管料行业投资前景及策略咨询研究报告.docx
- 2025至2031年中国屏蔽箱行业投资前景及策略咨询研究报告.docx
- 2025年中国B级电源电涌保护器市场调查研究报告.docx
- 2025至2031年中国陶瓷印章行业投资前景及策略咨询研究报告.docx
- 2025至2031年中国保冷材料行业投资前景及策略咨询研究报告.docx
- 2025至2031年中国金彩立雕玻璃行业投资前景及策略咨询研究报告.docx
- 2025至2030年中国机箱螺母柱数据监测研究报告.docx
- 2025至2030年中国小GS管装饰头数据监测研究报告.docx
- 2025至2030年中国气动电阻焊机数据监测研究报告.docx
最近下载
- (女方净身出户)离婚协议书5篇.docx
- 2023年中储粮储运有限公司招聘考试真题.docx VIP
- 矿山生态修复工程合同.doc VIP
- 矿山生态修复治理工程合同.doc VIP
- 浙江省镇海区五校联考2025届物理八年级第一学期期末监测试题含解析.doc
- 2023新教材高考生物二轮专题复习整合训练十二人体的内环境与稳态.docx
- 2024从洞见到生意:阿里健康特色人群消费趋势报告.pptx VIP
- 2024年01月江苏武进经济开发区(常州西太湖科技产业园)管理委员会2024年选聘14名“两湖”优才笔试历年高频考点-难、易错点荟萃附答案带详解.docx
- 幼儿园大班第一学期开学家长会PPT课件.pptx
- 2024小学二年级奥林匹克数学竞赛决赛试卷及答案 .pdf VIP
文档评论(0)