标签:
在模板定义语法中关键字class与typename的作用完全一样。
什么是类模板
如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板
类模板定义
Step1: 声明模板
三种声明形式:
1。基本模板类
template<class T1,class T2>
2。带默认类型形参
template<typename T3, typename T4=int>
3。带非类型模板参数
template<class T5,int a>
Step2: 定义类
template<class T> class Test{ private: T n; const T i; static T cnt; public: Test():i(0){} Test(T k); ~Test(){} void print(); T operator+(T x); };
Step3: 在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则还需在函数体外进行模板声明,并在函数名前的类名后缀加上“<T>”
template<class T> Test<T>::Test(T k):i(k){n=k;cnt++;} template<class T> T Test<T>::operator+(T x){ return n + x; }
Step4: 在类定义体外初始化const成员和static成员变量,需再对模板进行声明
template<class T> int Test<T>::cnt=0;
什么是模板类
模板类是类模板实例化后的一个产物。
什么是函数模板
template<typename(或class) T> T fuc(T x, T y) { T x; //…… }
什么是模板函数
模板函数的生成就是将函数模板的类型形参实例化的过程
标签:
原文地址:http://www.cnblogs.com/qionglouyuyu/p/4181521.html