模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,
从而实现了真正的代码可重用性。就是说,有很多工作,对不同的数据类型,处理上是一致的,这时我们就
可以只写一份代码,对不同类型的变量采用相同的代码来处理。
模版可以分为两类,一个是函数模版,另外一个是类模版。
函数模板:
template <class 或 typename T>
返回类型 函数名(形参表)
{//函数定义体 }
{//函数定义体 }
例:
//Test.cpp
#include <iostream>
using std::cout;
using std::endl;
//
声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小,class也可以被typename代替,
//T
可以被任何字母或者数字代替。
template
<class T>
T min(T x,T y)
{ return(x<y)?x:y;}
void
main( )
{
int n1=2,n2=10;
double d1=1.5,d2=5.6;
cout<< "
较小整数:"
<<min(n1,n2)<<endl;
cout<< "
较小实数:"
<<min(d1,d2)<<endl;
system("PAUSE");
}
类模版:
Template < class或typename T >
class类名{
//类定义......
};
class类名{
//类定义......
};
例:
// ClassTemplate.h
#ifndef ClassTemplate_HH
#ifndef ClassTemplate_HH
#define
ClassTemplate_HH
//声明一个类
template
<typename T1,typename T2>
class
myClass{
private
:
T1 I;
T2 J;
public
:
myClass(T1 a, T2 b);//Constructor
void show();
};
//
这是构造函数
//
注意这些格式
template
<typename T1,typename T2>
myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){}
//
这是void show();
template
<typename T1,typename T2>
void
myClass<T1,T2>::show()
{
cout<<"I="<<I<<", J="<<J<<endl;
}
#endif
// Test.cpp
#include
<iostream>
#include
"ClassTemplate.h"
using
std::cout;
using
std::endl;
void
main()
{
myClass<int,int> class1(3,5);
class1.show();
myClass<int,char> class2(3,'a');
class2.show();
myClass<double,int> class3(2.9,10);
class3.show();
system("PAUSE");
}