




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Copyright2008PearsonAddison-Wesley.Allrightsreserved.,Chapter17,Templates,Slide17-3,Overview,17.1TemplatesforAlgorithmAbstraction17.2TemplatesforDataAbstraction,Copyright2008PearsonAddison-Wesley.Allrightsreserved.,17.1,TemplatesforAlgorithmAbstraction,Slide17-5,TemplatesforAlgorithmAbstraction,FunctiondefinitionsoftenuseapplicationspecificadaptationsofmoregeneralalgorithmsForexample:Thegeneralalgorithmusedinswap_valuescouldswapvariablesofanytype:voidswap_values(type_of_var,Slide17-6,swap_valuesforchar,Hereisaversionofswap_valuestoswapcharactervariables:voidswap_values(char,Slide17-7,AGeneralswap_values,Ageneralizedversionofswap_valuesisshownhere.voidswap_values(type_of_varThisfunction,iftype_of_varcouldacceptanytype,couldbeusedtoswapvaluesofanytype,Slide17-8,AC+functiontemplatewillallowswap_valuestoswapvaluesoftwovariablesofthesametypeExample:templatevoidswap_values(T,Templateprefix,TemplatesforFunctions,Slide17-9,TemplateDetails,templateisthetemplateprefixTellscompilerthatthedeclarationordefinitionthatfollowsisatemplateTellscompilerthatTisatypeparameterclassmeanstypeinthiscontext(typenamecouldreplaceclassbutclassisusuallyused)Tcanbereplacedbyanytypeargument(whetherthetypeisaclassornot)AtemplateoverloadsthefunctionnamebyreplacingTwiththetypeusedinafunctioncall,Slide17-10,CallingaTemplateFunction,CallingafunctiondefinedwithatemplateisidenticaltocallinganormalfunctionExample:Tocallthetemplateversionofswap_valueschars1,s2;inti1,i2;swap_values(s1,s2);swap_values(i1,i2);Thecompilercheckstheargumenttypesandgeneratesanappropriateversionofswap_values,Slide17-11,TemplatesandDeclarations,AfunctiontemplatemayalsohaveaseparatedeclarationThetemplateprefixandtypeparameterareusedDependingonyourcompilerYoumay,ormaynot,beabletoseparatedeclarationanddefinitionsoftemplatefunctionsjustasyoudowithregularfunctionsTobesafe,placetemplatefunctiondefinitionsinthesamefilewheretheyareusedwithnodeclarationAfileincludedwith#includeis,inmostcases,equivalenttobeinginthesamefile“Thismeansincludingthe.cppfileor.hfilewithimplementationcode,Slide17-12,TisthetraditionalnameforthetypeparameterAnyvalid,non-keyword,identifiercanbeusedVariableTypecouldbeusedtemplatevoidswap_values(VariableType,Display17.1,TheTypeParameterT,Slide17-13,TemplateswithMultipleParameters,FunctiontemplatesmayusemorethanoneparameterExample:templateAllparametersmustbeusedinthetemplatefunction,Slide17-14,AlgorithmAbstraction,UsingatemplatefunctionwecanexpressmoregeneralalgorithmsinC+AlgorithmabstractionmeansexpressingalgorithmsinaverygeneralwaysowecanignoreincidentaldetailThisallowsustoconcentrateonthesubstantivepartofthealgorithm,Slide17-15,ProgramExample:AGenericSortingFunction,Thesortfunctionbelowusesanalgorithmthatdoesnotdependonthebasetypeofthearrayvoidsort(inta,intnumber_used)intindex_of_next_smallest;for(intindex=0;indexnumber_used-1;index+)index_of_next_smallest=index_of_smallest(a,index,number_used);swap_values(aindex,aindex_of_next_smallest);Thesamealgorithmcouldbeusedtosortanarrayofanytype,Slide17-16,sortusestwohelperfunctionsindex_of_smallestalsousesageneralalgorithmandcouldbedefinedwithatemplateswap_valueshasalreadybeenadaptedasatemplateAllthreefunctions,definedwithtemplates,aredemonstratedin,Display17.2,Display17.3(1-2),GenericSorting:HelpingFunctions,Slide17-17,TemplatesandOperators,Thefunctionindex_of_smallestcomparesitemsinanarrayusingtheoperatorIfatemplatefunctionusesanoperator,suchas,thatoperatormustbedefinedforthetypesbeingcomparedIfaclasstypehastheoperatoroverloadedfortheclass,thenanarrayofobjectsoftheclasscouldbesortedwithfunctiontemplatesort,Slide17-18,DefiningTemplates,WhendefiningatemplateitisagoodideaTostartwithanordinaryfunctionthataccomplishesthetaskwithonetypeItisofteneasiertodealwithaconcretecaseratherthanthegeneralcaseThendebugtheordinaryfunctionNextconvertthefunctiontoatemplatebyreplacingtypenameswithatypeparameter,Slide17-19,InappropriateTypesforTemplates,Templatescanbeusedforanytypeforwhichthecodeinthefunctionmakessenseswap_valuesswapsindividualobjectsofatypeThiscodewouldnotwork,becausetheassignmentoperatorusedinswap_valuesdoesnotworkwitharrays:inta10,b10;swap_values(a,b);,Slide17-20,Section17.1Conclusion,CanyouIdentifyatemplateprefix?Identifyaparametertypeinatemplateprefix?Compareandcontrastfunctionoverloadingwiththeuseoftemplates?Whatadditionalcomplexitiesareinvolvedwhenclasstypesareinvolvedasparametertypes?,Copyright2008PearsonAddison-Wesley.Allrightsreserved.,17.2,TemplatesforDataAbstraction,Slide17-22,TemplatesforDataAbstraction,ClassdefinitionscanalsobemademoregeneralwithtemplatesThesyntaxforclasstemplatesisbasicallythesameasforfunctiontemplatestemplatecomesbeforethetemplatedefinitionTypeparameterTisusedintheclassdefinitionjustlikeanyothertypeTypeparameterTcanrepresentanytype,Slide17-23,AClassTemplate,ThefollowingisaclasstemplateAnobjectofthisclasscontainsapairofvaluesoftypeTtemplateclassPairpublic:Pair();Pair(Tfirst_value,Tsecond_value);continuedonnextslide,Slide17-24,TemplateClassPair(cont.),voidset_element(intposition,Tvalue);/Precondition:positionis1or2/Postcondition:positionindicatedissettovalueTget_element(intposition)const;/Precondition:positionis1or2/Returnsvalueinpositionindicatedprivate:Tfirst;Tsecond;,Slide17-25,DeclaringTemplateClassObjects,Oncetheclasstemplateisdefined,objectsmaybedeclaredDeclarationsmustindicatewhattypeistobeusedforTExample:Todeclareanobjectsoitcanholdapairofintegers:Pairscore;orforapairofcharacters:Pairseats;,Slide17-26,UsingtheObjects,Afterdeclaration,objectsbasedonatemplateclassareusedjustlikeanyotherobjectsContinuingthepreviousexample:score.set_element(1,3);score.set_element(2,0);seats.set_element(1,A);,Slide17-27,DefiningtheMemberFunctions,MemberfunctionsofatemplateclassaredefinedthesamewayasmemberfunctionsofordinaryclassesTheonlydifferenceisthatthememberfunctiondefinitionsarethemselvestemplates,Slide17-28,ThisisadefinitionoftheconstructorforclassPairthattakestwoargumentstemplatePair:Pair(Tfirst_value,Tsecond_value):first(first_value),second(second_value)/NobodyneededduetoinitializationaboveTheclassnameincludes,DefiningaPairConstructor,Slide17-29,Definingset_element,Hereisadefinitionforset_elementinthetemplateclassPairvoidPair:set_element(intposition,Tvalue)if(position=1)first=value;elseif(position=2)second=value;else,Slide17-30,TemplateClassNamesasParameters,ThenameofatemplateclassmaybeusedasthetypeofafunctionparameterExample:TocreateaparameteroftypePair:intadd_up(constPair/Returnsthesumoftwointegersinthe_pair,Slide17-31,TemplateFunctionswithTemplateClassParameters,Functionadd_upfromapreviousexamplecanbema
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 盐城幼师考编试题及答案
- Z世代消费心理洞察:2025年新消费品牌情感价值塑造策略报告
- 天然气勘探开发技术创新与市场前景分析报告
- 能源与资源行业:能源行业供应链风险管理研究报告
- 班组自查报告
- 新消法考试题及答案
- 江苏省苏州市昆山市、太仓市2025年第二学期普通高中半期考试初三数学试题含解析
- 四川省广元市重点中学2024-2025学年初三(普通班)下学期期末考试生物试题试卷含解析
- 安全管理与施工效率的关系试题及答案
- 木工画图考试题及答案
- 2025年新思想概论考试题及答案
- 球团焙烧工(高级)技能鉴定备考试题库-上(单选、多选题)
- 知识宝库中的宝藏知识产权的投资潜力和实践路径探索
- 基于深度学习的图像修复算法研究
- 隐私与保密信息管理制度
- 《隧道防火保护板系统技术规程》
- 2025年安徽黄山旅游集团招聘笔试参考题库含答案解析
- 中铜国际贸易集团有限公司招聘笔试冲刺题2025
- 商演服务合同
- 《建筑采光分析》课件
- 海洋机器人与人工智能知到智慧树章节测试课后答案2024年秋哈尔滨工程大学
评论
0/150
提交评论