第5 章 模板 (WHUT版).ppt

第5 章 模板 (WHUT版).ppt

ID:48230906

大小:274.00 KB

页数:50页

时间:2020-01-18

第5 章 模板 (WHUT版).ppt_第1页
第5 章 模板 (WHUT版).ppt_第2页
第5 章 模板 (WHUT版).ppt_第3页
第5 章 模板 (WHUT版).ppt_第4页
第5 章 模板 (WHUT版).ppt_第5页
资源描述:

《第5 章 模板 (WHUT版).ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第五章模板主要内容模板的概念函数模板和模板函数类模板和模板类5.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++解决这个问题的一个方法就是使用模板。利用模板机制可以显著减少冗余信息,能大幅度地节约程序代码,进一步提高面向对象程序的可重用性和可维护性模板

2、概念是对类属概念的继承与发展。类属类属是一种参数多态的机制。ALGOL68语言最先引入类属(genericity)的概念,最主要的类属形式是类型参数化,即用一个或多个类型去参数化一个软件元素。基本思想:在实际工作中人们经常用到刚才那样一些程序模块,从它们的逻辑功能(或实现算法)看,彼此是相同的,所不同的主要是处理对象(数据)的类型。如果提供具有相同逻辑功能的程序正文(保存共性),然后把数据类型作为参数传递(指出不同特性),则可节约大量程序代码,这就是类属机制的思想,又称为参数化模板。类属又可分为无约束类属机制和约束类属机制无约束类属机制是指对作为类属参数的数据类型没有

3、任何特殊要求约束类属机制则意味着对类属参数有明确要求,只有在类属实参满足一定条件时才有意义。1.无约束类属的例子voidswap(T&x,T&y){Ttemp;temp=x;x=y;//只要是同类型就可以赋值y=temp;}2.约束类属的例子Tminimum(Tx,Ty){if(x<=y)returnx;elsereturny;}并不是任何数据类型都可以作为这个函数的类属实参,只有满足一定条件(即定义了“<=”操作)的数据类型,才能作为这个函数的类属实参。//结构变量的比较运算与整型变量的比较运算就有很大差别C++语言使用模板来实现类属机制。在C++中,模板是实现代码

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

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

6、,才可以定义模板。5.2函数模板和模板函数函数模板的定义和模板函数的生成1)定义函数模板的一般形式:template函数返回值类型函数名(形参表){//函数体}说明函数模板的关键字。关键字class后面的类型参数名是模板形参,它可以代表基本数据类型,也可以代表类。[例]:将求最大值的函数max()定义成函数模板。template//模板声明Tmax(Tx,Ty)//模板定义体{return(x>y)?x:y;}其中,T是模板形参,它既可以取系统预定义的数据类型,也可以取用户自定义的类型。2)模板函数

7、的生成:定义了函数模板后,程序中并没有得到真正的函数代码。只有用一个具体的数据类型来代替上面的类型参数T以后,即将模板具体化后,系统才会生成特定于具体数据类型的程序代码(模板函数)。当程序中有如下语句时,inti;i=max(2,30);编译系统就会自动生成具有整型参数和返回值的函数代码:intmax(intx,inty){return(x>y)?x:y;}然后将它插入到程序中,这个生成的函数称为模板函数。这样,如果再有一句对整型参数的函数调用,系统就不会再次生成函数代码,而是直接使用已经生成的函数代码了。[例]:同样,如果程序中又有了这么一句函数调

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

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

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