C++初阶模板--1 https://developer.aliyun.com/article/1424649
类模板:
类模板的格式如下:
template<class T1, class T2, ..., class Tn> class 类模板名 { .......... };
类模板的实例化:类模板的实例化与函数模板的实例化不同,类模板的实例化需要在类模板名字后跟 “ <> ”,然后将实例化的类型放在 “ <> ” 中即可。
template<class T> class Stack { public: Stack(int capacity = 4) { cout << "Stack(int capacity = 4)" << endl; _a = new T[capacity];//这里需要用到T,所以不能直接实例化int*或double* _top = 0; _capacity = capacity; } ~Stack() { cout << "~Stack()" << endl; delete[] _a; _a = nullptr; _top = 0; _capacity = 0; } T* _a; int _top; int _capacity; }; int main() { //显示实例化 Stack<int> st1; cout << typeid(st1._a).name() << endl;//输出int*,因为 T* _a Stack<double> st2; cout << typeid(st2._a).name() << endl;//输出double*,因为 T* _a return 0; }
注意:类模板名字不是真正的类,而实例化的结果才是真正的类,如下:
Stack<int> st1; //Stack只是类名,Stack<int>才是类型 Stack<double> st2; //Stack只是类名,Stack<double>才是类型
当我们使用类模板对象中的成员时,要使用 “ 类型 ” 进行作用域的访问,不能使用类名。
Stack<int>.~Stack() //调用Stack<int>类型的析构函数 Stack<double>.~Stack() //调用Stack<double>类型的析构函数
注意:
1,模板在运行时不检查数据类型,也不保证类型安全,相当于类型的宏替换。
2,要区分类模板和模板类,类模板是一个类家族,重点在类上,可以实现类的不同类型,模板类重点在类上,是通过类模板实例化的具体类。
3,类模板的成员函数都是模板函数。