template <classT>//类模板定义
classPoint{//Point不是类名是模板名
public:
Point(): x(0), y(0){}//默认构造函数
Point(const T a, const T b): x(a), y(b){}//带参数构造函数
void Set(const T a, const T b);
void Display(){
cout<<"Display: "<<"x="<<x<<",y="<<y<<endl;}
private:
T x, y;};
如果在类模板外部定义成员函数, 形式为:
template <模板形参表>
返回类型 类名<类型参数表>::函数名(形式参数列表){
函数体
}
eg:
template <classT>
void Point<T>::Set(const T a, const T b)//属于类模板里面的成员函数
{
x=a , y=b;}
Point <int> a, b;//定义类模板对象, 调用默认构造函数
Point <double> m(1,2), n(3,4);//定义类模板对象 , 调用带参数构造函数,对象m和n里面的数据成员都是double类型的
模板形参表还可以是非类型形参, 其形式与函数形参表相似。 例如:
template <classT,int N>//T表示T类型
classSequence{//Sequence类模板
public:
void Set(int i, T value);
T Get(int i){return array[i];}
private:
T array[N];};
template <classT,int N>
void Sequence<T,N>::Set(int i, T value)//属于Sequence类类型的实参
{
array[i]=value;}