- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
运算符重载和类型转换第1页,共34页,星期日,2025年,2月5日主要内容运算符重载的目的运算符重载概述重载的规则和限制如何重载运算符常见运算符的重载类型转换小结第2页,共34页,星期日,2025年,2月5日classComplex{public:Complex(floatr=0,floati=0){real=r;image=i;}Complexadd(constCompexc){returnComplex(real+c.real,image+c.image);}private:floatreal,image;};voidmain(){ inti=29,j=870,k; floatx=2.6,y=2.4; k=i+j; floatz=x+y; Complexc1(3.2,4.6),c2(6.2,8.7),c3; c3=c1.add(c2);}第3页,共34页,星期日,2025年,2月5日运算符重载概述运算符是一些系统预定义的函数名称,即用一些特定的符号表示各种运算。每个运算符对运算数据都有一定要求。C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作,这就提出了对运算符进行重新定义,赋予已有符号以新功能的要求。运算符重载是对已有的运算符赋予多重含义,同一个运算符作用于不同类型的数据导致不同类型的行为。 运算符重载的实质就是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。第4页,共34页,星期日,2025年,2月5日运算符重载的规则和限制不可以重载的运算符有:..*::?:sizeof只能重载C++语言中已有的运算符,不可臆造新的。运算符重载后优先级和结合性都不会改变,不能改变操作数个数,单目只能重载为单目运算符,双目只能重载为双目运算符不能改变运算符对预定义类型数据的操作方式,即重载运算符时,其操作数中至少应该有一个是自定义类型。重载的运算符应保持其原有的基本语义。C++规定:=-()[]只能重载为成员函数形式:作为提取和插入运算符使用时,只能用友元函数重载第5页,共34页,星期日,2025年,2月5日运算符函数定义运算符重载函数的一般格式:typeoperator@(arg){......//函数体}type为函数返回值的类型;@为要重载的运算符;arg为函数的形参表,operator是关键字,它与其后的运算符一起构成函数名。为了提高访问效率,运算符重载函数通常需要直接访问对象的私有或保护的数据成员,因此运算符重载函数通常为类的成员函数或者友元函数。第6页,共34页,星期日,2025年,2月5日重载为类的成员函数双目运算符B如果要重载B为类的成员函数,使之能够实现表达式oprd1Boprd2,其中oprd1为A类对象,则B应被重载为A类的成员函数,形参类型应该是oprd2所属的类型。经重载后,oprd1Boprd2相当于oprd1.operatorB(oprd2)前置单目运算符U如果要重载U为类成员函数,使之能够实现表达式Uoprd,其中oprd为A类对象,则U应被重载为A类的成员函数,无形参。经重载后,表达式Uoprd相当于oprd.operatorU()第7页,共34页,星期日,2025年,2月5日后置运算符“++”和“??”如果要实现表达式oprd++或oprd??,其中oprd为A类对象,那么运算符重载函数中要带一个整型(int)形参。经重载后,oprd++相当于oprd.operator++(0)oprd??相当于oprd.operator??(0)前增量与后增量的区别使用前增量时,对对象(操作数)进行增量修改,然后再返回该对象,参数与返回的是同一个对象使用后增量时,必须在增量之前返回原有的对象。后增量操作返回的是原有对象值,不是原有对象,原有对
文档评论(0)