1、c++的Template中的很多地方typename与class这两个关键字
template<typename T>在模板定义语法中关键字class与typename的作用完全一样
2、类模板和模板类的概念
(1)一个类模板(类生成类)允许用户为类定义一种模式,使得类中的某些数据成员,默认成员函数的参数,某些成员函数的返回值,取得任意类型(包括预定义和用户自定义的)
2、如果一个类中的数据成员的数据类型不能确定,或者某一个成员函数的参数或者返回值的类型不能确定,必须将此类声明为模板,它的存在不是代表了一个具体的、实际的类,而是代表了一类;
类模板定义:
定义一个类模板,一般有两方面的内容
A、首先要定义一个类,格式为
template <class T>
class Test
{
…..
}
test 为类名,在类定义体中,如果采用通用的数据类型的成员,函数参数的前面需要加上T,其中通用类型T可以作为普通成员变量的类型。还可以作为成员函数的参数和返回值类型。
例如
template<class T>
class Test
{
private:
T n;
const T i;
public:
Test():i(0){};
Test(T k);
~Test(){}
void print();:
T operator+(T x);
};
如果在类外定义成员函数,若此函数中有模板参数存在,则除了需要和一般类的类外定义成员函数一样的定义外, 还需要再函数外进行模板声明
template<class T>
Test<T>::Test(T k):i(k){n = k;}
template<class T>
T Test<T>::operator+(T x){
return n + x;
}
template<class T>
Test<T>::Test(T k):i(k){n = k;}
template<class T>
T Test<T>::operator+(T x){
return n + x;
}
关于类模板的使用:类模板的使用实际上是将类模板实例化成具体的类,它的格式为:类名<实际的类型>