欢迎来到天天文库
浏览记录
ID:38302056
大小:1.42 MB
页数:234页
时间:2019-06-08
《面向对象程序设计(C++语言)四ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、李爱华程磊编著清华大学出版社同名教材配套电子教案2010年2月面向对象程序设计(C++语言)4第二部分面向对象的程序设计第3章 类和对象(一)第4章 类和对象(二)第5章 继承和派生第6章 虚函数与多态性第7章 运算符重载第8章 模板第9章 标准模板库STL第10章C++语言的输入和输出2第8章 模板本章重点:模板的概念函数模板与模板函数类模板与模板类3模板是C++最重要的特性之一,使用模版可以设计出与数据类型无关的程序框架,可以建立具有通用类型的类库和函数库。模板是C++软件重用机制的又一完美体现,引出了参数化多态
2、性的概念,即把程序所处理的对象的类型参数化,使得一段程序可以用于多种不同类型的对象。48.1模板的概念前面已经学过函数的重载,对于int型和float型数据,必须定义两个单独的函数Max(),才能实现对两个数求最大值的功能。如下程序所示的函数Max,,实现两个函数的主要操作都是一样的,唯一的差别是:一个函数处理int型数据,另一个函数处理float型数据。intMax(inta,intb)//求两个int数最大值{returna>b?a:b;}floatMax(floata,floatb)//求两个float数最大值{
3、returna>b?a:b;}可以看出,求任何类型两个数的最大值,都有下列函数定义形式:TMax(Ta,Tb)//求两个T类型数最大值{returna>b?a:b;}5这种Max重载函数的统一特征是参数类型不同,函数体操作却完全相同。考虑这样两个问题:第一,能否避免函数重载时的重复工作?第二,这些重载函数对新的数据类型是否支持?要解决这两个问题,C++中的模板就可以做到。有了模板,重复的函数重载工作可以省略;良好的模板再结合运算符重载等其他机制,也能够适用于各种新定义的数据类型。68.2函数模板与模板函数函数模板是函数
4、的一种抽象形式。函数模板的定义形式为:template返回类型函数模板名(数据参教表){函数模板的函数体}7前面的Max函数因此可以写成如下形式:templateTMax(Ta,Tb)//求两个T类型数最大值{returna>b?a:b;}8模板并不是函数,它是以具体的类型为实参来生成函数体的一种程序框架,C++在编译函数模板时,不会产生任何执行代码。只有在用函数模板来定义具体函数时,才会生成执行代码,而使用函数模板则只需以函数模板名为函数名进行函数调用即
5、可。9【例8.1】编写求最大和求绝对值两个函数模板。/*08_01.cpp*/#includeusingnamespacestd;templateTMax(Ta,Tb)//求两个T类型数最大值{returna>b?a:b;}templateTAbs(Ta)//求T类型数的绝对值{returna>=0?a:-a;}10intmain(){intia=-5,ib=11,ic;floatfa=3.14f,fb=7.2f,fc;ic=Max(ia,ib);cout
6、<<”Max(ia,ib)=”<7、ib是整型,因此确定函数模板中的抽象类型T为int,所以内部生成如下的模板函数:templateintMax(inta,intb){returna>b?a:b;}而把此参数类型具体化产生新的模板函数的过程称为函数模板实例化。13【例8.2】重载模板函数。/*08_02.cpp*/#include#includetemplateTMax(Ta,Tb)//求两个T类型数最大值{returna>b?a:b;}char*Max(char*pa,char8、*pb){returnstrcmp(pa,pb)>0?pa:pb;}voidmain(){cout<
7、ib是整型,因此确定函数模板中的抽象类型T为int,所以内部生成如下的模板函数:templateintMax(inta,intb){returna>b?a:b;}而把此参数类型具体化产生新的模板函数的过程称为函数模板实例化。13【例8.2】重载模板函数。/*08_02.cpp*/#include#includetemplateTMax(Ta,Tb)//求两个T类型数最大值{returna>b?a:b;}char*Max(char*pa,char
8、*pb){returnstrcmp(pa,pb)>0?pa:pb;}voidmain(){cout<
此文档下载收益归作者所有