类模板和函数模板

                  模板通常分为模板函数和类模板。ios

                  模板函数的通常形式为:数组

                  template<类型形参表> 返回值类型 函数名(参数列表){函数体}函数

                  类模板的通常形式为:spa

                  template<类型形参表> class 类名 {类声明体}code

                  类中成员函数的类外实现的形式get

                  template<类型形参表> 返回值类型 类名<类型名表>::成员函数名(参数列表) {函数体}io

                  下面以数组模板类为例编译

                  

#include <iostream> using namespace std; template <typename T> class Array { public: Array(int size = 10); ~Array(); T operator[](int index); T& get(int index) const; int length() const { return m_len; } private: Array(const Array&); Array& operator ==(const Array&); T *p_array; int m_len; }; template<typename T> Array<T>::Array(int size): p_array(new T[size]), m_len(size) { } template<typename T> Array<T>::~Array() { delete p_array; } template<typename T> T Array<T>::operator[](int index) { return p_array[index]; } template<typename T> T& Array<T>::get(int index) const { if (index > m_len -1 ) { throw "ERROR:index is out!"; } else { return p_array[index]; } } int main() { Array<int> intArr; cout << "length of int array is " << intArr.length() << '\n'; try{ intArr.get(11); }catch(const char *ex) { cout << ex << '\n'; } intArr.get(0) = 2; cout << "elems of int array is "; for (int i = 0; i < intArr.length();++i) { cout << intArr[i] << '\t'; } cout << '\n'; Array<char> charArr(5); cout << "length of cahr array is " << charArr.length() << '\n'; try{ charArr.get(11); }catch(const char *ex) { cout << ex << '\n'; } charArr.get(4) = 'Z'; cout << "elems of char array is "; for (int i = 0; i < charArr.length();++i) { cout << charArr[i] << '\t'; } return 0; } 

         结果:模板

       


       使用模板通常都是逻辑相同,类型不一样。class

      模板函数在实例化时以函数重载来体现都是在编译期完成。