第11章 模板 - 副本

第11章 模板 - 副本

ID:44977732

大小:220.00 KB

页数:51页

时间:2019-11-06

第11章  模板 - 副本_第1页
第11章  模板 - 副本_第2页
第11章  模板 - 副本_第3页
第11章  模板 - 副本_第4页
第11章  模板 - 副本_第5页
资源描述:

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

1、第11章模板11.1模板的概念[引例]intmax(intx,inty){return(x>y)?x:y;}doublemax(doublex,doubley){return(x>y)?x:y;}charmax(charx,chary){return(x>y)?x:y;}可以看出,这些函数版本的功能都是相同的,只是参数类型和函数返回类型不同。那么能否为这些函数只写出一套代码呢?C++解决这个问题的一个方法就是使用模板。在C++中,模板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从

2、而实现代码的可重用性。C++程序由类和函数组成,C++中的模板也分为类模板和函数模板。[例]Tmax(Tx,Ty){return(x>y)?x:y;}1.模板的概念这个以参数化表示的函数称为函数模板。2.函数模板所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型(如:T)来代替,这个通用函数就称为函数模板。3.模板函数在定义了一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应的形参,然后生成一个重载函数,该函数的定义与函

3、数模板的函数定义体相同,称之为模板函数。[比较]函数模板和模板函数的区别函数模板是模板的定义,定义中用到通用类型参数。模板函数是实实在在的函数定义,它由编译系统在遇到具体函数调用时所生成,具有程序代码。同样,类模板是模板的定义,不是一个实实在在的类,其定义也用到通用类型参数。在定义了一个类模板后,可以创建类模板的实例,即生成模板类。模板(函数模板和类模板)模板函数模板类对象实例化实例化实例化4.模板、模板函数、模板类和对象之间的关系[说明]由于模板的作用是使程序能够对不同类型的数据进行相同方式的处理,因此,

4、在进行相同方式的处理时,只有当参加运行的数据类型不同时,才可以定义模板。11.2函数模板和模板函数11.2.1函数模板的定义和模板函数的生成定义函数模板的一般形式:template函数返回值类型函数名(形参表){//函数体}说明函数模板的关键字。关键字class后面的类型参数名是模板形参,它可以代表基本数据类型,也可以代表类。[例]将求最大值的函数max()定义成函数模板。template//模板声明Tmax(Tx,Ty)//模板定义体{

5、return(x>y)?x:y;}其中,T是模板形参,它既可以取系统预定义的数据类型,也可以取用户自定义的类型。模板函数的生成定义了函数模板后,程序中并没有得到真正的函数代码。只有用一个具体的数据类型来代替上面的类型参数T以后,即将模板具体化后,系统才会生成特定于具体数据类型的代码。当程序中有如下语句时,inti;i=max(2,30);系统就会自动生成具有整型参数和返回值的函数代码:intmax(intx,inty){return(x>y)?x:y;}然后将它插入到程序中,这个生成的函数称为模板函数。这样

6、,如果再有一句对整型参数的函数调用,系统就不会再次生成函数代码,而是直接使用已经生成的函数代码了。[例]同样,如果程序中又有了这么一句函数调用:doublex=max(12.3,48.5);系统会先看有没有已经从模板生成了函数代码,如果没有,就生成具有双精度浮点型参数的函数代码:doublemax(doublex,doubley){return(x>y)?x:y;}[说明]一般来说,当编译程序看到对模板函数的调用语句时,就会根据函数模板生成对应于该特定数据类型的具体函数代码。但是,也可以通过声明函数原型来告

7、诉编译程序实例化函数模板。例如:floatmax(float,float);当编译器看到函数原型时,会先根据函数模板生成相应的函数代码。[程序分析]例11-1不同数据类型数组中的元素求和11.2.2函数模板的使用虽然函数模板中的模板形参T可以实例化为各种类型,但实例化T的各模板实参之间必须保持完全一致的类型。模板类型并不具有隐式的类型转换,例如在int与char之间、float与int之间、float与double之间等的隐式类型转换。[例11-2]分析下面程序中的错误#includeu

8、singnamespacestd;templateTmax(Ta,Tb){Tc;if(a>b)c=a;elsec=b;returnc;}intmain(){inti1=50,i2=40;charc1='A',c2='B';doublex1=45.6,x2=2.5e2;cout<

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

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

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