欢迎来到天天文库
浏览记录
ID:50297784
大小:315.50 KB
页数:40页
时间:2020-03-07
《C++面向对象程序设计 教学课件 作者 张德慧 周元哲 主编第9章 模板.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《C++面向对象程序设计》教学内容第1章C++概述第2章类和对象第3章面向对象程序设计概述第4章进一步学习类和对象第5章堆与复制构造函数第6章继承性:派生类第7章运算符重载第8章虚函数和多态性第9章模板第10章类库和C++的标准模板库STL第11章输入输出流第12章异常处理第9章模板9.1模板的概念9.2函数模板9.3重载模板函数9.4类模板的定义9.5使用类模板9.6应用举例问题的引入很多算法本身的描述其实与其所涉及数据的类型是无关的。但是,高级语言大多数都是基于类型系统的语言,当用高级语言表达算法
2、的实现时,就必须明确指出其具体的数据类型,这样以来就必然导致同一个算法有多个不同的实现(针对不同的数据类型)。从而使工作量加大,使用麻烦,维护困难。例:将两个数进行交换(请同学们想一想共有几种方案?)解决方案一:宏定义在C语言中,宏定义是解决类型无关算法的首选解决方案。例:#definemax(x,y)((x)>(y)?(x):(y));宏定义有如下的缺点:重复计算只能处理简单的情况例如:这里的Swap(x,y)使用宏定义就不好处理。解决方案二:用C语言的函数voidSwapI(int*x,int*y
3、){inttemp;temp=*x;*x=*y;*y=temp;}voidSwapF(float*x,float*y){floattemp;temp=*x;*x=*y;*y=temp;}从上面的实现可以看出,这种方案不仅实现上浪费很大,而且使用起来非常的不方便(不同的函数名)。解决方案三:C++函数名重载voidSwap(int&x,int&y){inttemp;temp=x;x=y;y=temp;}voidSwap(float&x,float&y){floattemp;temp=x;x=y;y=te
4、mp;}与C语言相比,C++的函数名重载让使用者大大地得到了解放,但实现者还是需进行大量的重复性劳动。解决方案四:模板templatevoidswap(T&x,T&y){Tt;t=x;x=y;y=t;}所谓模板是一种是将类型参数化来产生一系列函数或类的机制。9.1模板的概念模板的英文为template,又可译作样板。C++中的模板可以用来设计与数据类型无关的通用算法。这样的通用算法能够适用不同场合下不同的数据类型。通过针对不同的数据类型实例化这些模板,可以实现代码重用,从而达到提高软件
5、生产率的目的。模板的作用通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型都编写一个单独的类或函数。什么是模板template?所谓模板是一种是将类型参数化来产生一系列函数或类的机制。9.2函数模板templateret_typefunc_name(parameterlist){//bodyoffunction}type是函数模板所使用的数据类型的占位符名称,又称为模板参数。将type实例化的类型称为模板实参,用模板实参实例化函数模板得到的函数
6、称为模板函数。函数模板的两种实例化方式//显式实例化//隐式实例化#includeusingnamespacestd;templateTmin(Ta,Tb){return(a(i,cobj1)<7、)<(cobj2,j)<usingnamespacestd;templateXmyabs(Xval){returnval<0?-val:val;}intmain(){cout<8、<<'';//doubleabscout<b)?a:b;}//对于长整数类型longmax(longa,longb){return(a>b)?a:b;}//对于单精度浮点数floatmax(floata,fl
7、)<(cobj2,j)<usingnamespacestd;templateXmyabs(Xval){returnval<0?-val:val;}intmain(){cout<8、<<'';//doubleabscout<b)?a:b;}//对于长整数类型longmax(longa,longb){return(a>b)?a:b;}//对于单精度浮点数floatmax(floata,fl
8、<<'';//doubleabscout<b)?a:b;}//对于长整数类型longmax(longa,longb){return(a>b)?a:b;}//对于单精度浮点数floatmax(floata,fl
此文档下载收益归作者所有