模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。
一、函数模板函数的重载可以实现一个函数名多用,将是实现相同或类似功能的函数用一个函数名定义,虽然含义清楚,但仍要分别定义每一个函数,为此,c++提供函数模板。建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就是函数模板。
#includeusing namespace stdl
template//模板声明,T为类型参数
T max(T a,T b,T c)
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
int main()
{
int i1=185, i2=-76, i3=5678,i;
double d1=5.11, d2=231.12, d3=-3214.78,d;
long g1=67854,g2=-912456,g3=673456,g;
i=max(i1,i2,i3);//调用模板函数,T被int取代
d=max(d1,d2,d3);
g=max(g1,g2,g3);
cout<
上面就是一个简单的模板函数。
不难看出,定义函数模板的一般形式为:
template函数定义
此外,typename可换成class。
template的含义即是模板,<>中先写关键字typename(或class),后面跟一个类型参数T,T是一个虚拟的类型名 ,表明他是一个类型名但并未指明具体类型。从而,在函数定义是用T来定义的变量a,b,c也是未确定的。当函数调用时,编译器会根据实参的类型来确定T的类型。
class与typename作用相同,可以互换,但为了与类class区分,一般用typename。
需要注意的是,函数模板只适用于函数体相同,函数参数个数相同而数据类型不同的情况,如果参数个数不同,则不能使用函数模板。
二、类模板 1.与函数模板类似,有时,有两个或多个类,其功能相同,仅仅是数据类型不同如下面声明了一个类,用来比较两个整数的大小。
class Compare_int
{
public:
Compare_int (int a,int b)//定义构造函数
{x=a;y=b;}
int max()
{return (x>y)?x:y;}
int min()
{return (x
但如果想对两个浮点数作比较,还需要重新声明一个类:
class Compare_float
{
public:
Compare_float (float a,float b)//定义构造函数
{x=a;y=b;}
float max()
{return (x>y)?x:y;}
float min()
{return (x
显然,这基本上是重复性的工作,所以,c++增加了template功能,用来减少重复。
2.类模板对于上面两个类,可以声明一个通用的模板,他可以有一个或多个虚拟的类型参数
template//声明一个模板,虚拟类型名为numtype
class Compare
{
public:
Compare(numtype a, numtype b)//定义构造函数
{x=a;y=b;}
numtype max()
{return (x>y)?x:y;}
numtype min()
{return (x
与前面Compare_int不同的是:1.声明类模板要增加一行 template
可以这样说类模板是类的抽象,类是类模板的实例。
类模板的使用类定义对象的方法:Compare_int com(4,7); ,类模板定义对象与此类似,但不能直接写Compare com(4,7);因为Compare只是类模板名,他不是一个具体的类,类模板中的类型numtype不是一个实际的类型,只是一个虚拟的类型,不能用来定义对象。因此,我们需要一个实际的类型名来取代虚拟类型 如下:
Compare
不难看出,其一般形式为:类模板名<实际类型名>对象名(参数)
1:先写出一个实际的类(如上面的Compare_int)
2:将此类准备改变的类型名(如int改为float)改成虚拟类型名(如上面的numtype)
3:在类声明前加一行
template
4:用类模板定义对象
类模板名<实际类型名>对象名;
类模板名<实际类型名>对象名(实参表);
如:
Compare
Compare
5:如果在类模板外定义成员函数,应写成类模板形式:
template
函数类型 类模板名<虚拟类型参数>::成员函数名(函数形参表){……}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款