类模板

1.和函数模板产生的原因相同,通常很多的类都是类体相同,只有参数不同的时候将会用到这个所谓的类模板;类模板在声明处和函数模板没有什么不同,但是实现的地方确实大不相同模板代码不能分离编译,也就说所有的模板代码只能够在.h文件中实现,这样才能够编译通过;若是将函数的定义写在类的内部,则无需注意一些什么,但是若将函数定义写在类的外部,就会有所不同

2. 类模板的声明定义以及调用示例:

 1 template<typename T,int KSize,int KVal>//定义类模板必须写这一行代码
 2 class MyArray{
 3 public:
 4     MyArray();
 5     ~MyArray(){
 6         delete []m_pArr;
 7         m_pArr = NULL;
 8     }
 9     void display();
10 private:
11     T *m_pArr;
12 };
13 
14 template<typename T,int KSize,int KVal>//定义在外部的函数必须要有这一行代码
15 MyArray<T,KSize,KVal>::MyArray(){//注意这里二元域解析运算符前面的类名发生的变化
16     m_pArr=new T[KSize];
17     for(int i = 0;i<KSize;i++){
18         m_pArr[i]=KVal;
19     }
20 }
21 template<typename T,int KSize,int KVal>
22 void MyArray<T,KSize,KVal>::display(){
23     for(int i = 0;i<KSize;i++){
24         cout<<m_pArr[i]<<endl;
25     }
26 }
27 
28 //调用代码
29  MyArray<int,6,5> myArray;//此时才生成一个模板类
30  myArray.display();
View Code
原文地址:https://www.cnblogs.com/upup-2015/p/5042869.html