C++面向对象程序设计双语教程(第3版)课件 ch05Operator Overloading_第1页
C++面向对象程序设计双语教程(第3版)课件 ch05Operator Overloading_第2页
C++面向对象程序设计双语教程(第3版)课件 ch05Operator Overloading_第3页
C++面向对象程序设计双语教程(第3版)课件 ch05Operator Overloading_第4页
C++面向对象程序设计双语教程(第3版)课件 ch05Operator Overloading_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

OperatorOverloadingC++面向对象程序设计双语教程(第3版)Chapter501IntroductiontoOperatorOverloadingThepreviouschapterdefinedandimplementedtheDateclass.ItalsoshowedhowtheDateclasscanbeusedtorepresentadateintheuser'sprogram.Let'sreviewthedefinitionoftheDateclass.IntroductiontoOperatorOverloadingThefirststatementprintsthevalueofthemyDayobject.Whethercanweusetheinsertionoperator<<tooutputthevalueofmyDay?ThesecondstatementincrementsthevalueofmyDaybyoneyear,whethercanweusetheincrementoperator++toincrementthevalueofmyDay?IntroductiontoOperatorOverloadingLikewise,whethercanweusearelationaloperatorforcomparison?Ifyes,wecanenhancetheflexibilityformanipulatingobjectmyDay.Thus,wecanusethefollowingstatementsinsteadofthepreviousstatements.IntroductiontoOperatorOverloadingAsweknow,C++supportsasetofoperatorsforbuilt-intypes.However,theseoperatorscannotbeapplieddirectlytouser-definedtypes.IntroductiontoOperatorOverloadingAlthoughwewanttousetheoperators<<,++andtorepresentthenotionsofthemyDayobjeet,thiswillcausecompileerrorssincewedonotdefinethebehavioroftheDateclasswith<<,++and==.Therefore,wemustextendthedefinitionoftheseoperatorsinourclassDate.Thisisealledoperatoroverloading,inC++terminology.

Operatoroverloadingisoneofthemostexcitingfeaturesofobject-orientedprogramming.IntroductiontoOperatorOverloading02OperatorFunctionsC++allowstheusertooverloadmostoftheoperatorssothattheoperationscanwork

effectivelyinaspecificapplication.Hereisalistofalltheoperatorsthatcanbeoverloaded:OperatorFunctionsThefollowingoperators

cannotbedefinedbyauser:scoperesolution;memberselection;memberselectionthroughpointertomember;ternaryoperator.OperatorFunctionsOperatorFunctionsInordertooverloadoperators,youmustwritefunetions.Thefunctionthatoverloadsan

operatorisnamedbythereservedwordoperatorfollowedbytheoperatortobeoverloaded.OperatorFunctionsThefirstfunctionoverloadsanadditionoperator(+)asamemberfunction.Thesecondfunctionoverloadsaminusoperator()asanon-memberfunction.Noticethatwehavetoacccssdatamembersrealandimaginthenon-memberoperatorfunctionsoweputthesedata

membersintothepubliepartoftheclassdeclarationincomplex.h.OperatorFunctionsHowever,puttingdatamembersrealandimagintothepublicpartofclasscomplexviolatestheinformationhidingoftheclass.WecandefineaminusoperatorQ)asafriendfunction.OperatorFunctionsTherefore,overloadingoperatorsasanon-membercouldrequireadditionalmemoryandcomputationaltimetomakealocalcopyofthedata.Thus,forefficiencypurpose,whereverpossible,youshouldoverloadoperatorsasmemberfunctions.OperatorFunctions03BinaryandUnaryOperatorsIngeneral,arithmetic,suchas+,-,*,orrelation,suchas-,<=,representabinaryoperator.Thesebinaryoperatorscanbedefinedbyeitheranon-staticmemberfunetiontakingoneparameteroranon-member(orfriend)functiontakingtwoparameters.OverloadingBinaryOperatorsBinaryandUnaryOperatorsOverloadingUnaryOperatorsTheprocessofoverloadingunaryoperatorsissimilartotheprocessofoverloadingbinaryoperators.Theonlydifferenceisthatinthecaseofunaryoperators,theoperatorhasonlyoneparameter.BinaryandUnaryOperatorsTheexamplesabovepresenttheprefixinerementoperator(+)tobeoverloaded.Todistinguishbetweenpre-andpost-fixincrementoperatoroverloading,weuseadummyparameter(oftypeint)inthefunctiondeelarationoftheoperatorfunction.BinaryandUnaryOperators04OverloadingCombinatorialOperatorsThemeaningsofsomebuilt-inoperatorsaredefinedtobeequivalenttosome

combinationofotheroperatorsonthesamearguments.Forexample,ifaandnareintegers,a

+=nmeansa=a+n.Suchrelationsdonotholdforuser-definedoperatorsunlesstheuserhappenstodefinethemthatway.OverloadingCombinatorialOperatorsYoumaynoticethatthetwostatementsinLines9and15(inexample5_4.cpp)outputthedifferentresults.Thesetwostatementslookverysimilar.However,theyhavedifferentmeanings.ThestatementinLine9initializesanobjectc2bytheconstructedobjectclandinvokesthecopyconstructorofclasscomplex,doingamember-wisecopyofobjectc1.OverloadingCombinatorialOperatorsThe

outputisshowninLine3oftheResult.ThestatementinLine15invokestheassignment

operator(=)functionofclasscomplex,assigningobjeeteltoobjecte2.Theoutputisshownin

Line7oftheResult.OverloadingCombinatorialOperatorsThefirststatementinvokesadefaultcopyconstructortoinitializethec2objeetby++cl.Thesecondstatementinvokesadefaultassignmentoperatortoassignthenewdatafromc1++toc2.Thesituationwiththedefaultimplementationsisthatasimplecopyofthemembers(i.e.Shallowcopy)maynotbeappropriatetocloneanobject.OverloadingCombinatorialOperatorsThe

shallowcopyingthepointerisnotenoughbecausenowyou'llhavetwoobjectsthathavethesamepointervalue,andbothobjectswilltrytofreethememoryallocatedtothatpointerwhentheyaredestroyed.Inthiscase,wemustdefineacopyconstructorandanassignmentoperatorforcopyingobjects(i.e.DeepCopy).OverloadingCombinatorialOperators05MixedArithmeticofUserDefinedTypesAnoperatorfunctionmusteitherbeamemberortakeatleastoneargumentofa

user-definedtype(thisisnotneededforthefunctionsredefiningthenewanddeleteoperators).Thisruleensuresthatausercannotchangethemeaningofanexpressionunlesstheexpression

containsan

objectofauser-definedtype.MixedArithmeticofUserDefinedTypesInparticular,itisnotpossibletodefineanoperator

functionthatoperatesexclusivelyonpointers.ThisensuresthatCt+isextensiblebutnot

mutable(withtheexceptionofoperators=and&,forclassobjects).MixedArithmeticofUserDefinedTypesSometimes.anoperatorfunctionintendstoacceptabuilt-intypeasanoperand.Thesecondlinestatesthatacomplexobjectcisaddedtotheinteger2:c+2can,witha

mberfunetion,whichcanbeinterpretedasc.MixedArithmeticofUserDefinedTypesHowever,the2+estatementinthethirdlinecannotbedonebecausethereisnoclassint

forwhichthedefinitionofoperator+means2.Inthiscase,theoperatorfunctionneedstobedefinedasanon-memberfunctionas

follows.MixedArithmeticofUserDefinedTypesEveniftherewere,twodifferentmemberfunctionswouldbeneededtocopewith2+candc+2.Becausethecompilerdoesnotknowthemeaningofauser-defined+,itcannotassumethatitiscommutativeandtheninterpret2+casc+2.MixedArithmeticofUserDefinedTypes06TypeConversionofUser-DefinedTypesMostprogramsprocessavarietyoftypes.Sometimesalltheoperations"staywithina

type".Forinstance,addinganintegertoanintegerproducesaninteger.Butitisoftennecessarytoconvertdataofonetypetodataofanothertype.TypeConversionofUser-DefinedTypesThiscanhappeninassignments,incalculations,inpassingvaluestofunetions,andinreturningvaluesfromfunctions.Thecompilerknowshowtoperformcertainconversionamongbuilt-intypes.Programmerscanforceconversionsamongbuilt-intypesbycasting.TypeConversionofUser-DefinedTypesConvertingaBuilt-InTypetoaUserDefinedTypeSuchconversioncanbeperformedbyaconstructor,calledconversionconstructors,namely,singleargumentconstructorsthatconvertobjectsofbuilt-intypesintoobjectsofaspecifiedclass.TypeConversionofUser-DefinedTypesConvertingaBuilt-InTypetoaUserDefinedTypeInLine5ofthemainfunetion,10.5isfirstconvertedtoanunnamedcomplexobjectbyinvokingtheconversionconstructor,plex(10.5),andthec2objectisthencreatedbytheunnamedobject.TypeConversionofUser-DefinedTypesAconversionoperator(alsocalledaeastoperator)canbeusedtoconvertanobjectofoneclassintoan

objectofanotherclassorintoanobjectofabuilt-intype.转换运算符(也称为cast运算符)可用于将个类的对象转换为另一个类的对象或转换为内置类型。ConvertingaUser-DefinedTypetoaBuilt-InTypeTypeC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论