一,基础定义
类模板是用来生成类的蓝图,是一种创建类的方式,同一套类模板可以生成很多种不同的类。
编译器基于类模板生成的每个类被称为类模板的实例。
第一次使用模板类型声明变量时,会创建类模板的一个实例, 以后定义同类型的变量时,会使用已经创建的第一个实例。
类模板有许多应用,最常见的应用是定义容器类。
类模板和类一样,可以有友元,其友元可以是类,函数或者其他模板。
如果一个派生类继承自该类模板,那么这个派生类也必须是模板。
类模板的代码样式:
template <parameter list>
class ClassName
{
//class definition ...
}
类型模板参数 & 非类型模板参数图示:
代码样例:用类模板实现的Array<T>
template <typename T>
class Array
{
private:
T* elements;
size_t size;
public:
explicit Array<T>(size_t arraySize); //构造函数
Array<T>(const Array<T>& array); //拷贝构造函数
~Array<T>(); //析构函数
T& operator[](size_t index); //下标运算符
Array<T>& operator=(const Array<T>& rhs); //赋值运算符
size_t getSize() const {return size;}
};
在类模板的内部,可以直接使用类模板名称,不需要显式地带模板参数,因此,在类模板的内部,Array和Array<T>等价。
以上代码可以简化为:
template <typename T>
class Array
{
private:
T* elements;
size_t size;
public:
explicit Array(size_t arraySize);
Arr