本文共 1526 字,大约阅读时间需要 5 分钟。
模板函数的一般形式为:
template<类型形参表> 返回值类型 函数名(参数列表){函数体}
类模板的一般形式为:
template<类型形参表> class 类名 {类声明体}
类中成员函数的类外实现的形式
template<类型形参表> 返回值类型 类名<类型名表>::成员函数名(参数列表) {函数体}
下面以数组模板类为例
#includeusing namespace std;template 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 Array ::Array(int size): p_array(new T[size]), m_len(size){}template Array ::~Array(){ delete p_array;}template T Array ::operator[](int index){ return p_array[index];}template T& Array ::get(int index) const{ if (index > m_len -1 ) { throw "ERROR:index is out!"; } else { return p_array[index]; }}int main(){ Array 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 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;}
结果:
使用模板一般都是逻辑相同,类型不同。
模板函数在实例化时以函数重载来体现都是在编译期完成。
转载地址:http://nxqxi.baihongyu.com/