《模板及其应用ppt课件.ppt》由会员分享,可在线阅读,更多相关《模板及其应用ppt课件.ppt(50页珍藏版)》请在金锄头文库上搜索。
1、 9 2 3 使用类型参数和普通参数的类模板使用类型参数和普通参数的类模板 第9章模板及其应用一1团敌颊权“9.2类模板9.3关于类模板若干问题的说明9.4本章介绍函数模板与类模板的定义及其使用方法。通过使用模板,可使所编程序更加紧凑,增加程序的通用性及可重用性。9.1函数模板9.LJl函数模扳的概念及说明9.1.2函数模板的应用举例9.1.1“函数模板的概念及说明一参看书p299-301通常设计的算法(处理语句是可以处理多种数据类型的,但目前处理相同的问题,仍要分别定义多个类似的函数。sintmaxinta,intb)if(ab)Teturn2;else.一TeturmbD;doublema
2、x(doublea,doubleb)if(ab)Teturn2;elsereturnbD;charmax(chara,charb)_iri董I_iIi_-_-实际上,若“提取“出一个可变化的类型参数T,则可“综熹成为如下的同一个函数(模板,它实际上代表着一Tmax(Ta,Ib)elsereturnb;在C+中定义完整的函数模板max时,格式如下:templateclassTTmax(Ta,ITb)if(ab)returna;elsereturnb;函数模板定义的一般格式为:template“五口奂王“白学技FE1孕3夺1白颊f)注意:)应在“返回类型“或“形参表“或“函数体“中使用上述的“类型
3、形参名“。2)调用处则类似于一般函数,用户只需给出具体的实参。3)模板函数调用时,不进行实参到形参类型的自动转换。9.1.2函数模板的应用举例一参看书p302定义一个函数模板max,而后对它进行不同的调用。#includeiostreamhtemplateclassT7max(Ta,Tb)if(ab)returnai;elsereturnb;voidmain0【intilz-Llb,i2=0;coutKKmax(il,i2)KKendl;/由实参iL,让,系统可确定“类型形参T“对应于intcoutKKmax(23,-56)KKend1;coutKCmax(不,“K)KKendl:;Cind1
4、2d2;coutKKmax(dl,d2)KKendl;/coutkK“max(23,-5.6)=“KKmax(23,-5.6)KKendl;/出错!不进行实参到形参类型的自动转换程序执行后的显示结果如下:intil*-Lb,i2=0;二max(il,i2)=0max(23,-56)=23maxxC不,医)井万inputdoubledl,dQ:123.4599.67dl=123.45,d2-99.67冬max(dl,d2)=123.452函数模板例2一函数模板与函数重载定义一个函数模板与一个函数,它们都叫做min,C+允许这种函数模板与函数同名的所谓重载使用方法。但注意,在这种情况下,每当遇见函
5、数调用时,C+H编译器都将首先检查是否存在重载函数,若匹配成功则调用该函数,否则再去匹配函数模板。“林nclude#ncludetemplateclassreturn(ab2a:b);char*min(char*a,char*b)/函数min,字符串型参数,不能直接使用“来进行比较return(stremp(a,b)02a:b);voidmain()coutmin(3,-10)endl:/使用函数模板coutmin(2.5,99.5)endL;coutmin(mc)endl;char*strl=“TheCprogram,*str2=“TheC+program7;coutmin(strl,str2)endl;/使用重载函数!ttotieoshisiiisessss出竖3.函数模板例3一二函数模板重载定义两个函数模板,它们都叫做sum,都使用了一个娄型两者的形参个数不同C+允许使用这种函数模2E暨型的参蹇数熹譬垄莫,愕现与类型形参Type无关的其它类松ncludetemplateTypesum(Type*array,intsize)/求array数组前size个元素之和Typetotalz0;for(intZ0;isize;i+)totalH=*(array+D;returntotal;10