- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【函数模板】
【函数模板】
最具挑战性的挑战莫过于提升自我。——迈克尔·F·斯特利
最具挑战性的挑战莫过于提升自我。——迈克尔·F·斯特利
【函数模板】
功能相同而数据类型不同的一些函数,不必一一定义各个函数,可以定义一个可以对任何类型变量进行操作的函数模版。
定义:函数类型和形参不具体制定,用一个虚拟的类型来代表,这个通用函数就称为函数模版。
适用范围:凡是函数体相同的函数都可以用函数模版来实现。
好处与解决问题:不用定义多个函数,只需要在模版中定义一次即可。
【举例】
给定3个数,不制定其类型,求3个数的最大值。
1、不使用函数模版
(函数定义)
如果不更换类型名,需要重载函数
int max(int a,int b,int c)
long max(long a,long b,long c)
double max(double a,double b,double c)
(引用)
max(a,b,c)
2、使用函数模版
(函数定义)
不需要重载函数
Templatetypename T //模版声明,其中T为类型参数,typename是关键字
T max(T a,T b,T c)
(引用)
max(a,b,c)
【定义模板的一般形式】
template typename T 或 templateclass T
注意: 这里T是一个虚拟的类型名,在函数定义时用T来定义变量a,b,c,在定义时a,b,c的类型是不确定的,在调用时根据实参的类型来确定T是什么类型。
另外,类型参数可以不止一个,可以根据需要确定个数:
如:
Template class T1,typename T2
【类模板】
有两个或多个类,其功能是相同的,仅仅是数据类型不同,可以考虑使用类模版。使用的时候只需要在类的声明前加上Template class 虚拟类型参数
如:
Template class numtype
class Compare
{ public:
Compare(numtype a,numtype b)
{x=a,y=b};
numtype max()
{return (xy)?x:y;}
numtype min()
{return (xy)?x:y;}
private:
numtype x,y;
};
函数的成员函数如果要在类模板外定义,应该改写成类模版的形式:
templateclass numtype
numtype Comparenumtype::max() //表示在类模板的作用域内
{ return(xy)?x:y;}
注意:类模版的参数可以有一个或多个,每个类型前面都必须加class,如:
templateclass T1,class T2
class someclass
{...};
在定义对象时分别代入实际的类型名,如:
someclassint,doubleobj
【实际问题】
Typedef CArrayCGeoPoint,CGeoPoint CCurve //一条等值线曲线的点集的坐标
Typedef CTypedPtrListCPtrList,CCurve*CCurveList//等值线曲线链表
【分析】
(1)templateclass TYPE,class ARG_TYPE
class CArray:public CObject
TYPE:模板参数,指定数组中存储的对象类型。
ARG_TYPE:模板参数,指定用于存取数组中所存对象的参数类型。通常是对TYPE的引用。
CArray:按需要动态分配
常用成员函数:Add,GetSize,SetSize,GetAt(返回给定下标处的元素的值),InserAt(将一个元素插入到指定的下标处,RemoveAt;
类似的数组模板类还有:CObArray,CByteArray,CPtrArray,CStringArray...
(2) templateclass BASE_CLASS,class TYPE
class CTypedPtrList: public BASE_CLASS
BASE_CLASS:类型指针列表的基类;且必须是一个指针列表类CObList,CPtrList
TYPE:存放在基类列表中的类
原创力文档


文档评论(0)