版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡镇文化活动实施方案乡镇创先争优活动实施方案
- 组织老干部活动方案
- 2024年个人售房合同协议书模板转让协议
- 【核心素养】统编版语文八年级上册19 苏州园林 教案
- 2024实施合同范本范文
- 《琵琶行》《李凭箜篌引》《听颖师弹琴》群文阅读教学设计 2023-2024学年统编版高中语文选择性必修中册
- 初中语文七上9《从百草园到三味书屋》教学设计
- Module 10单词讲解(教学设计+素材)-2024-2025学年外研版(三起)英语五年级上册
- 2023年微污染防控设备项目分析评估报告
- 吉林省吉林市丰满区2024-2025学年数学六年级第一学期期末统考试题含解析
- (中考试题)2024年浙江省湖州市中考数学真题-附解析
- 2024年广东南海控股集团有限公司招聘笔试冲刺题(带答案解析)
- 居住空间设计教学教案91
- 绿色建筑设计标准-云南
- 噎食及吞食异物的防范与护理
- 青年你为什么要入团-团员教育主题班会-热点主题班会课件
- 慢性粒细胞白血病小讲课
- (正式版)SHT 3158-2024 石油化工管壳式余热锅炉
- 《奇山异水、多彩民俗-西南旅游区导学案-中国旅游地理》
- MOOC 创业基础-暨南大学 中国大学慕课答案
- 儿童口腔科普馆建设方案
评论
0/150
提交评论