函数模板和类模板
1.函数模板
当几个函数函数功能相同,仅仅是参数类型不同时,可以定义函数模板
函数模板实际上是定义一个通用函数,其函数类型和形参类型不确定,用一个虚拟的类型来代替。函数模板只适用于函数体相同,函数参数个数相同而类型不同的情况。
上代码:
# include<iostream>
using namespace std;
template <typename T> //模板声明,其中T为类型参数
T max(T a, T b, T c)
{
if (a<b)
a = b;
if (a<c)
a = c;
return a;
}
int main()
{
int a1=3, a2 = 4, a3 = 5;
double d1=4, d2 = 5, d3 = 6;
float f1 = 3, f2= 7, f3 = 8;
cout<<max(a1, a2, a3)<<endl;
cout<<max(d1,d2,d3)<<endl;
cout<<max(f1,f2,f3)<<endl;
return 0;
}
有一个疑问,如果形参类型和函数类型不同的话,按照上面的函数模板定义形式,还可以使用函数模板么?谭浩强教材中没有给出解释。
与函数模板类似,可以定义类模板
2.类模板 p294
例1:
# include<iostream>
using namespace std;
template <class 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 main()
{
Compare <int> c(10, 9);
cout<<c.max()<<endl;
return 0;
}
例2:
# include<iostream>
using namespace std;
template <class numtype> //模板声明
class Compare
{
public:
Compare(numtype a, numtype b)
{
x=a;
y=b;
}
numtype max();
numtype min()
{
return ((x<y)?x:y);
}
private:
numtype x, y;
};
template <class numtype> //在类模板外定义成员函数
numtype Compare <numtype>::max()
{
return x>y?x:y;
}
int main()
{
Compare <int> c(10, 9);
cout<<c.max()<<endl;
return 0;
}