1、class 和 typename
(1)class :一般class用于定义类,在模板引入c++后,最初定义模板的方法为:template<class T>,这里class关键字表明T是一个类型;
(2)typename :为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,定义模板的方法为:template<typename T>。
(3)在模板定义语法中关键字class与typename的作用完全一样。
2、类模板(它是一个模板)
一个类模板(类生成类)允许用户为类定义个一种模式,使得类中的某些数据成员、默认成员函数的参数,某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。
相反,如果一个类中的数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表一类类。
2.1 类模板的声明
template<class T>
class Test
{
public:
Test():i(0) {}
Test(T k);//参数
~Test(){}
void print();
T operator+(T x);//返回值,可将operator+理解为一个函数名
private:
T n;//成员函数
const T i;
};
2.2 类模板的定义
如果在类外定义成