类模板——深入浅出

来源:互联网 发布:linux 参数是引用类型 编辑:程序博客网 时间:2024/06/05 06:53

类模板就是Class的模板,和之前写过的函数模板大同小异。函数模板概念以及实现原理学习链接:点击打开链接

一、那么什么是类模板?有什么作用呢?

类模板也是对数据类型进行参数化处理,奖类模板实例化就是指定具体数据,将得到一个具体的、可定义对象的类。

一般写法比较单一,如果要处理多种数据类型就要定义多个类,会带来大量的代码冗余,造成不必要的工作量。普通类如下:

class Stack{public:void push(int I);int pop();private:enum {size = 100};int m_array[size];int m_count;};

如果将Stack类改成模板类,则会省去很多麻烦,代码如下:

template<tepename T>class Stack{public:void push(T e);T pop();private:enum { size = 100 };int m_array[size];int m_count;};//实例化模板        Stack<int> s1;Stack<double> s2;Stack<Shape> s1;      //声明一个可以处理Shape对象的栈对象

简言之:1> 一个类模板可以处理不同类型的数据;

                 2> 提高程序员的开发效率,不再为不同类型写相同的代码。

定义模板类,模板参数包括类型参数T和非类型参数size,代码如下:

template<typename T,int size>class Array{public:T & operator[](int i)          //模拟数组操作运算符‘[ ]’{return m_arr[i];}void set(int i, const T &e)      //设置第 i 个元素值为 e {m_arr[i] = e;}T sun{for (int i = 0; i < size; i++){sum += m_arr[i];}return sum;}private:T m_arr[size];                //内置数组,用类型参数和非类型参数定义};

二:类模板栗子讲解

template<class T,int size = 100>class Stack{public:Stack():m_iCount(0){ }bool push(const T &e);bool pop(T &e);int get_size () const{return m_iCount;}private:T m_iArray[size];int m_iCount;};template<class T,int size>bool Stack<T, size>::push(const T &e){if (m_iCount < size){m_iArray[m_iCount++] = e;return true;}else{return false;}}template<class T,int size>bool Stack<T, size>::pop(T &e){if (m_iCount >= 0){e = m_iArray[--m_iCount];return true;}else{return false;}}int main(){cout << "=====类模板实例化=====" << endl;Stack<int> iv;iv.push(1);      //压入1iv.push(2);      //压入2iv.push(3);      //压入3iv.push(2);      //压入2cout << "元素个数" << endl;cout << iv.get_size() << endl << endl;  int e = 0;iv.pop(e);cout << e << endl;       //弹出元素cout << "元素个数" << endl;cout << iv.get_size ()<< endl << endl;return 0;}

输出:





原创粉丝点击