类模板和函数模板
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
????????????????? 模板一般分為模板函數和類模板。
????????????????? 模板函數的一般形式為:
????????????????? template<類型形參表> 返回值類型 函數名(參數列表){函數體}
????????????????? 類模板的一般形式為:
????????????????? template<類型形參表> class 類名 {類聲明體}
????????????????? 類中成員函數的類外實現的形式
????????????????? template<類型形參表> 返回值類型 類名<類型名表>::成員函數名(參數列表) {函數體}
????????????????? 下面以數組模板類為例
??????????????????
#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; }???????? 結果:
???????
? ? ?? 使用模板一般都是邏輯相同,類型不同。
? ? ? 模板函數在實例化時以函數重載來體現都是在編譯期完成。 ????
轉載于:https://my.oschina.net/u/854744/blog/418476
總結
- 上一篇: Servlet高级
- 下一篇: MySQL慢查询处理之mysqldump