3.1.1 类模板的声明
类模板的声明和函数模板的声明很相似:在声明之前,我们先(用一条语句)声明作为类型参数的标识符;我们继续使用T作为该标识符:
template <typename T>
class Stack {
...
};
在此,我们可以再次使用关键字class来代替typename:
template <class T>
class Stack {
...
};
在类模板的内部,T可以像其他任何类型一样,用于声明成员变量和成员函数。在下面的例子中,T被用于声明vector的元素类型,声明push()是一个接收常量T引用为唯一实参的成员函数,声明top()是返回类型为T的成员函数:
template <typename T>
class Stack {
private:
std::vector<T> elems; //存储元素的容器
public:
Stack(); //构造函数
void push(T const &); //压入元素
void pop(); //弹出元素
T top() const; //返回栈顶元素
};
这个类的类型是Stack<T>,其中T是模板参数。因此,当在声明中需要使用该类的类型时,你必须使用Stack<T>。例如,如果你要声明自己实现的拷贝构造函数和赋值运算符,那么应该这样编写 :
template <typename T>
class Stack {
...
Stack (Stack<T> const&); //拷贝构造函数
Stack<T>& operator= (Stack<T> const&); //赋值运算符
...
};
然而,当使用类名而不是类的类型时,就应该只用Stack;譬如,当你指定类的名称、类的构造函数、析构函数时,就应该使用Stack。
【责任编辑:
杜书 TEL:(010)68476606】