类模板——深入浅出
来源:互联网 发布: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;}
输出:
阅读全文
0 0
- 类模板——深入浅出
- 【MVC】深入浅出MVC(二)——模板页使用
- 模板——函数模板、类模板
- 深入浅出模板方法模式
- 模板——类模板
- 模板——类模板
- 【深入浅出MFC】 仿真—重要类初始化
- 深入浅出SharePoint—目录
- 深入浅出JavaScript—ECMAScript
- 深入浅出理解:函数模板与类模板、存在的实际意义以及使用方法,
- 模板——函数模板与类模板
- 深入浅出PowerShell——入门
- 内存分配——深入浅出
- 内存分配——深入浅出
- 深入浅出BI——目录
- 深入浅出——UML状态图
- 深入浅出NodeJS——Buffer
- 深入浅出RPC——浅出篇
- 网站公告==>>微信订阅号正式开通
- UndefinedError: parameter 'form' was not provided(关键词:flask/bug)
- 为什么文件名必须和public修饰的类名称必须一致
- windows编程(1)-句柄,内核对象
- 兼容IE透明度,IE7以及以下版本不加载
- 类模板——深入浅出
- JMS基本概念
- 函数传参(函数作为参数)
- Swift-Core Graphics绘图框架详解3(绘制渐变、填充渐变色)
- Qt线程间共享数据
- 第十三周作业
- iOS代理机制实现原理和应用
- win7用WMI修改IP的方法
- 如何解决“access violation at address”错误