1.和函数模板产生的原因相同,通常很多的类都是类体相同,只有参数不同的时候将会用到这个所谓的类模板;类模板在声明处和函数模板没有什么不同,但是实现的地方确实大不相同;模板代码不能分离编译,也就说所有的模板代码只能够在.h文件中实现,这样才能够编译通过;若是将函数的定义写在类的内部,则无需注意一些什么,但是若将函数定义写在类的外部,就会有所不同
2. 类模板的声明定义以及调用示例:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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();