1 所谓函数模板,实际是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。
#include "stdafx.h"
#include<iostream>
using namespace std;
template<typename T> //模板声明,其中T为类型参数
T max(T a,T b,T c) //定义一个通用函数,用T作虚拟的类型名
{
if(a<b)
a=b;
if(a<c)
a=c;
return a;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i,i1=8,i2=98,i3=32;
double d,d1=39.3,d2=987.244,d3=83.987;
i=max(i1,i2,i3); // 调用模板函数,此时T被int取代
d=max(d1,d2,d3);
cout<<"整型最大值max="<<i<<endl;
cout<<"实型最大值max="<<d<<endl;
return 0;
}
程序运行结果:
注意,函数模板只适用于函数参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板
2 类模板
有时有两个或多个类,其功能是相同的,仅仅是数据类型不同,这时可以使用类模板来减少重复性的工作#include "stdafx.h"
#include<iostream>
using namespace std;
template<class numtype> //声明一个模板,虚拟类型为numtype
class Compare
{
public:
Compare(numtype a,numtype b)
{
x=a;
y=b;
}
numtype max()
{
return (x>y)?x:y;
}
numtype min()
{
return (x<y)?x:y;
}
private:
numtype x,y;
};
int _tmain(int argc, _TCHAR* argv[])
{
Compare<int> cmp1(3,7); //在类模板名之后在尖括号内指定实际的类型名
cout<<"int型比较:"<<cmp1.max()<<endl;
Compare<double> cmp2(9.544,1.5487); //在类模板名之后在尖括号内指定实际的类型名
cout<<"double型比较:"<<cmp2.min()<<endl;
Compare<char> cmp3('b','B');
cout<<"char型比较:"<<cmp3.min()<<endl; //在类模板名之后在尖括号内指定实际的类型名
return 0;
}
运行结果如下: