第20章 模板.ppt

第20章 模板.ppt

ID:48778708

大小:258.00 KB

页数:59页

时间:2020-01-23

第20章 模板.ppt_第1页
第20章 模板.ppt_第2页
第20章 模板.ppt_第3页
第20章 模板.ppt_第4页
第20章 模板.ppt_第5页
资源描述:

《第20章 模板.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第二十章模板19.1模板的概念C++是强类型语言,因此我们定义求最大值函数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;}这些函数版本执行的功能都是相同的,只是参数类型和返回类型不同,能否为上述这些函数只写出一套代码?解决问题的一个方法就是使用模板。所谓模板,就是写一个函

2、数模子,用这个模子套印出许多功能相同,参数类型和返回类型不同的函数。模板是实现了真正的代码可重用性。可以这么说:函数重载是指用同一个名字定义不同的函数,这些函数功能不同,执行不同的操作。函数模板是指用同一个名字定义不同的函数,这些函数功能相同,而参数类型和返回类型不同。1模板模板分为函数模板(模子)和类模板(模子),允许用户分别用它们构造(套印)出(模板)函数和(模板)类。图显示了模板(函数模板和类模板),模板函数,模板类和对象之间的关系。模板(函数模板和类模板)模板函数模板类对象实例化实例化实例化模子220.2函数模

3、板与模板函数20.2.1函数模板的声明与模板函数的生成函数模板的声明格式如下:template返回类型函数名(模板形参表){函数体}其中template是一个声明模板的关键字,它表示声明一个模板。例如,将求最大值函数max()定义成函数模板,如下所示:template或templateTmax(Tx,Ty){return(x>y)?x:y;}其中T为类型参数,它可用基本类型或用户自定义的类型。在使用函数模板时,必须将其实例化,即用实际的数据类型替代它。3函数模

4、板理想的函数重载是针对不同的参数做不同的事.而形如:voidswap(Type&a,Type&b){Typet=a;a=b;b=t;}的重载函数系所定义的行为序列却相同.这种形式的重载意义不大.定义函数模板来表示重载函数系Templatevoidswap(T&a,T&b){Tt=a;a=b;b=t;}模板形参函数模板名数据形参函数模板定义体函数模板用法以函数模板名作调用的函数名,以数据实参作参数传递.templatevoidswap(T&a,T&b){Tt=a;a=b;b=t

5、;}intfn(){intix=6,iy=7,ia=3,ib=5;swap(ix,iy);//产生函数定义体swap(ia,ib);//不产生函数定义体//...}例20.1函数模板的程序#include#includetemplateATmax(ATx,ATy){return(x>y)?X:y;}voidmain(){intil=10,i2=56;floatfl=12.5,f2=24.5;doubleb1=50.344,d2=4656.346;charc1

6、=’k’,c2=’n’;cout<<”themaxofil,i2is:“<

7、ofcl,c2is:n4函数模板参数2-1数据参数是按值的性质匹配的,所以相容类型之间可以转换类型参数是按名字匹配的,更为苛刻templatevoidswap(T&a,T&b){Tt=a;a=b;b=t;}intadd(doublea,doubleb){returna+b;}intfn(){intia=3;doubledb=5.0;chars1[]="good",s2[]="better";intx=add(ia,db);//okswap(ia,db);//errorswap(s1,s2);//e

8、rror对于引用性形式参数T&a来说,字符数组s1和s2不被看作室字符指针,s1和s2的类型为字符数组char[5]和char[7],由于5不等于7,所以不是同种类型,按照模板类型参数匹配原则编译错误,Tt=a;它等价于chart[5]=a,导致一个数组初始化非法编译错误}函数模板参数2-2模板类型参数没有隐式转换之说,必须精确匹

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。