首页 > 代码库 > C++ template

C++ template

在模板定义语法中关键字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;    //……}

什么是模板函数

模板函数的生成就是将函数模板的类型形参实例化的过程

C++ template