关键字: template <class t>, template <typename t>
模板 模板(template)是一个将数据类型参化的工具,它提供了一种将代码与数据类相脱离的机制,即代码不受具体的数据类型的影响。模板分为函数模板和类模板两种。 (1)函数模板 函数模板是一种不说明某些参数的数据类型的函数。例如,下面定义了一个可对任何类型变量进行操作(求绝对值)的函数模板。
template <class T> //或写成:template <typename T> T abs(T val) { return val<0 ? -val : val; }
在函数模板被调用时,编译器根据实际参数的类型确定模板参数T的类型,并自动生成一个对应的函数,即模板函数。模板参数的类型不同,生成的模板函数也不同。
例 1 函数模板的定义和使用
#include <iostream.h> template <class T> //定义模板 T abs(T val) //定义函数模板 { return val<0 ? -val : val; } void main() { int i=100; cout <<abs(i)<<endl; //类型参数T替换为int long l=-12345L; cout <<abs(l)<<endl; //类型参数T替换为long float f=-125.78F; cout <<abs(f)<<endl; //类型参数T替换为float }
定义函数模板时也可以使用多个类型参数,这时每个类型参数前面都要加上关键字class或typename,其间用逗分隔,其形式如下所示。 template <class T1,class T2,class T3>
例 2 使用多个类型参数的函数模板
#include <iostream.h> template <class T1,class T2> T1 Max(T1 x,T2 y) { return x>y ? x: (T1)y; } void main() { int i=100; float f=-125.78F; cout <<Max(i,f)<<endl; //类型参数T1替换为int,T2替换为float }
(2)类模板 使用多个类型参数的类模板
#include <iostream.h>
template <class T1,class T2> //使用2个类型参数
class MyTemClass //定义类模板
{
private:
T1 x;
T2 y;
public:
MyTemClass(T1 a,T2 b) { x=a;y=b; } //构造函数
void ShowMax() //输出最大的数据成员
{
cout <<"MaxMember="<<(x>y?x:y)<<endl;
}
};
void main()
{
int a=100;
float b=123.45F;
MyTemClass<int,float> mt(a,b); //声明类模板的对象
mt.ShowMax();
}
|
|