资源描述:
《《cprimer函数模板》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章模板6.1模板的概念6.2函数模板与模板函数6.3类模板和模板类1模板是面向对象多态性的一种表现,1990年ANSIC++委员会将模板确定为组成部分,BorlandC++3.0以上和VisualC++都支持模板。模板包括函数模板和类模板。一、为什么要引入模板?模板的引入一个最重要的目的就是简化编程。由于C++是强类型语言,许多类似功能(函数或类)只要数据类型不同,就必须定义多份,不但使源程序增长,工作量也加大。2例如,设计一个求两参数最大值的函数,不使用模板时,需要定义四个函数:intmax(inta,intb){return(a>b)
2、?a:b;}floatmax(floata,floatb){return(a>b)?a:b;}doublemax(doublea,doubleb){return(a>b)?a:b;}charmax(chara,charb){return(a>b)?a:b;}这些函数的功能甚至语句都类似,能否只写一套代码,使用与多种数据类型呢?6.1模板的概念36.1模板的概念解决的答案就是模板,通过类型参数化来实现代码重用——即把数据类型定义为参数,使用时才给出具体类型来实例化类型参数。模板分为函数模板(functiontemplate)和类模板(class
3、template)。函数模板模板函数实例化类模板模板类实例化4模板模板函数模板类对象实例化实例化图6.1模板、模板类、模板函数和对象之间的关系实例化6.1模板的概念5所谓函数模板,就是写一个函数模子,用这个模子套印出许多功能相同,参数类型和返回类型不同的函数。模板函数:函数模板实例化后的具体函数。6.2函数模板与模板函数66.2.1函数模板的声明与模板函数的生成函数模板的声明格式如下:template返回类型函数名(模板形参表){函数体}type是模板形参,在使用函数模板时,必须将其实例化,即用实际的数据类型替代它。6.
4、2函数模板与模板函数7函数max()若使用模板,则只定义一个函数:templatetypemax(typea,typeb){return(a>b)?a:b;}函数模板定义不是一个实实在在的函数,编译系统不为其产生任何执行代码。该定义只是对函数的描述,表示它每次能单独处理在类型形式参数表中说明的数据类型。6.2函数模板与模板函数8//例6.1#includetemplateTmax(Tx,Ty){return(x>y)?x:y;}main(){inti1=10,i2=56;float
5、f1=12.5,f2=24.5;doubled1=50.344,d2=4656.546;charc1=‘k’,c2=‘n’;6.2函数模板与模板函数9cout<<“themaxofi1,i2=“<6、>y)?x:y;}floatmax(floatx,floaty){return(x>y)?x:y;}doublemax(doublex,doubley){return(x>y)?x:y;}charmax(charx,chary){return(x>y)?x:y;}结果:themaxofi1,i2=56themaxoff1,f2=24.5themaxofd1,d2=4656.546themaxofc1,c2=n10函数模板max(Tx,Ty)模板函数1max(i1,i2)实例化1T->int模板函数2max(f1,f2)实例化2T->float
7、模板函数3max(d1,d2)实例化3T->double模板函数4max(c1,c2)实例化4T->char函数模板:一组函数的抽象模板函数:一个具体的函数代码重用,提高了程序设计的效率11例6.2:#includetemplateTsum(T*array,intsize=0){Ttotal=0;for(inti=0;i8、1,2.2,……,9.9,10.10};voidmain(){intitotal=sum(int_array,10);doubledtotal=sum(double