類模板和函數模板

                  模板通常分爲模板函數和類模板。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

      模板函數在實例化時以函數重載來體現都是在編譯期完成。     

相關文章
相關標籤/搜索