电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

C++邮电-8VIP免费

C++邮电-8_第1页
1/28
C++邮电-8_第2页
2/28
C++邮电-8_第3页
3/28
第8章模板8.1模板的概念8.2函数模板8.3类模板本章主要内容8.1模板的概念定义求最大值函数max():intmax(intx,inty){return(x>y)?x∶y;}floatmax(floatx,floaty){return(x>y)?x∶y;}doublemax(doublex,doubley){return(x>y)?x∶y;}这些函数的功能都是相同的,只是参数类型和函数返回类型不同问题:能否将这些函数合起来,只写一个通用函数呢?解决这个问题的方法:使用模板模板是实现代码重用机制的一种工具,它把类型定义为参数,实现类型参数化。调用时,T可以分别取为int、float、double把类型定义为参数,如下所示:Tmax(Tx,Ty){return(x>y)?x∶y;}类型参数intmax(intx,inty){return(x>y)?x∶y;}floatmax(floatx,floaty){return(x>y)?x∶y;}doublemax(doublex,doubley){return(x>y)?x∶y;}把类型定义为参数,如下所示:Tmax(Tx,Ty){return(x>y)?x∶y;}类型参数调用时,T取int调用时,T取float调用时,T取double函数模板模板类模板8.2函数模板8.2.1函数模板的声明函数模板可声明如下:函数模板也可以定义成如下形式:template返回类型函数名(模板形参表){函数体}使用函数模板时,类型参数必须实例化,即用实际的数据类型替代它。template是一个声明模板的关键字,它表示声明一个模板。template返回类型函数名(模板形参表){函数体}例如,求最大值函数模板,如下所示:templateTmax(Tx,Ty){return(x>y)?x∶y;}也可以定义成如下形式:templateTmax(Tx,Ty){return(x>y)?x∶y;}T为类型参数模板形参表8.2.2函数模板的使用函数模板代表的是一类函数,使用时,类型参数必须实例化,即用实际的数据类型(既可以是系统预定义的标准数据类型(int、float、double等),也可以是用户自定义的类型)替代它。将函数模板中的类型参数实例化的参数称为模板实参。用模板实参实例化的函数称为模板函数。当编译系统发现有一个函数调用:函数名(模板实参表);时,将根据模板实参表中的类型生成一个函数即模板函数。该模板函数的函数体与函数模板的函数体相同。#include//例8.1函数模板的使用。usingnamespacestd;template//模板声明,其中T为类型参数Tmax(Ta,Tb)//定义函数模板,“Ta,Tb”为模板形参表{return(a>b)?a:b;}intmain(){inti1=10,i2=56;doubled1=50.344,d2=4656.346;charc1='k',c2='n';cout<<"较大的整数是:"<usingnamespacestd;templatevoidmyfunc(type1x,type2y){cout<inti;//错误Tmax(Tx,Ty){return(x>y)?x∶y;}(3)模板函数类似于普通重载函数,但更严格一些。普通的非模板函数被重载的时候,在每个函数体内可以执行不同的动作。但同一函数模板实例化后的所有模板函数都必须执行相同的动作。(3)模板函数类似于普通重载函数,但更严格一些。普通的非模板函数被重载的时候,在每个函数体内可以执行不同的动作。但同一函数模板实例化后的所有模板函数都必须执行相同的动作。...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

您可能关注的文档

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部