类模板

模板是将类中某些类型变为泛型,从而定义一个模板。
如下:

类模板的语法

直接进行对比:

泛型化之前 泛型化之后

类模板的实例化

注意:只要是对类模版进行实例化,编译器就会生成一个类!!!
显式实例化:

template class Stack<int>;  // 将类模板实例化为一个处理int类型的Stack类

隐式实例化:
生成一个处理char类型的对象:

Stack<char>  charStack; // 先实例化一个CharStack类(名字由编译器按规则生成)// class CharStack { … char elements[100]; … };// 然后用 CharStack charStack; 创建一个对象

code附录

泛型化之前的:

#pragma once//编写StackOfIntegers类
class Stack {private:int elements[100];int size{ 0 };
public:bool empty();int peek();int push(int value);int pop();int getSize();Stack();
};
Stack::Stack() {size = 0;for (int& i : elements) {i = 0;}
}bool Stack::empty() {return (size == 0 ? true : false);
}int Stack::getSize() {return size;
}int Stack::peek() {return elements[size - 1];
}int Stack::pop() {int temp = elements[size - 1];elements[size - 1] = 0;size--;return temp;
}int Stack::push(int value) {elements[size] = value;size++;return value;
}

泛型化之后的:

#pragma once//泛型化
template <typename T>
//编写StackOfIntegers类
class Stack {private:T elements[100];int size{ 0 };
public:bool empty();T peek();T push(T value);T pop();int getSize();Stack();
};
template <typename T>
Stack<T>::Stack() {size = 0;for (auto & i : elements) {i = 0;}
}
template <typename T>
bool Stack<T>::empty() {return (size == 0 ? true : false);
}
template <typename T>
int Stack<T>::getSize() {return size;
}
template <typename T>
T Stack<T>::peek() {return elements[size - 1];
}
template <typename T>
T Stack<T>::pop() {T temp = elements[size - 1];elements[size - 1] = 0;size--;return temp;
}
template <typename T>
T Stack<T>::push(T value) {elements[size] = value;size++;return value;
}

main测试代码

#include "Stack.h"
#include <iostream>
#include <string>
int main()
{Stack<char> c;std::string s{ "Hello World!"};for (auto i : s) {c.push(i);}while (c.empty() != true) {std::cout << c.pop() << std::endl;}
}

【C++基础】 类模板相关推荐

  1. C++基础——类模板

    类模板 类模板stack的实现 拷贝构造函数和赋值运算符 类模板的特化 局部特化 缺省模板实参 类模板 类模板stack的实现 有两个角度观察STL中的stack模板类 模板类 通过将stack定义为 ...

  2. 二叉树应用-Huffman树类模板的实现(数据结构基础 第6周)

    简单实现来了Huffman树,在找最小堆的过程中使用到了自己做的最小堆MinHeap. 之前写的关于树的类模板中一直存在一个问题:结点的内存管理太混乱,有些甚至存在临时变量里.这里直接在类内直接定义了 ...

  3. C++ 泛型编程(一):模板基础:函数模板,类模板,模板原理,模板匹配规则

    类模板 函数模板 泛型编程 泛型编程,泛型即是指具有在多种数据类型上皆可操作的含义,其实就是能够帮助开发者编写完全一般化并可重复使用的算法,同样的工作不需要做多次,同样的算法针对不同的类型也不应该写多 ...

  4. [C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)

    http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/18/2728753.html 1.  主版本模板类 首先我们来看一段初学者都能看 ...

  5. C++ 泛型编程(一):模板基础:函数模板、类模板、模板推演成函数的机制、模板实例化、模板匹配规则

    文章目录 泛型编程 函数模板 函数模板实例化 隐式实例化 显式实例化 函数模板的匹配规则 类模板 类模板的实例化 泛型编程 泛型编程旨在削减重复工作,如: 将一个函数多次重载不如将他写成泛型. voi ...

  6. 【C++基础学习】引起类模板被实例化情形总结

    在我们使用类模板时,只有当代码中使用了类模板的一个实例的名字,而且上下文环境要求必须存在类的定义时,这个类模板才被实例化.并不是每次使用一个类都要求知道该类的定义. (1)声明一个类模板的指针和引用, ...

  7. C++基础:模板,函数模板和类模板

    文章目录 1. 函数模板 2. 类模板 3. 模板特化 3.1 函数模板特化 3.2 类模板特化 4. 非类型模板参数 模板是允许函数或类通过泛性的形式表现或运行的特性 1. 函数模板 模板可以使函数 ...

  8. C++基础:模板:函数模板和类模板

    模板: 为了代码重用,代码就必须是通用的:通用的代码就必须不受数据类型的限制. 那么我们可以把数据类型改为一个设计参数.这种类型的程序设计称为参数化(parameterize) 程序设计. 软件模块由 ...

  9. 全面总结C++类模板使用的基础知识

    ✨引言 书接上文,今天来学习C++模板知识中的第二大模块,也就是类模板的使用. <C++提高编程>专栏主要针对C++泛型编程和STL技术做详细讲解,深入研究C++的使用,对C/C++感兴趣 ...

最新文章

  1. 【视频】V4L2之应用流程
  2. 一个查看全部用户的磁盘空间使用情况的脚本
  3. python樱花树画法图片_用Python敲出樱花绽放 | 附代码
  4. VB.NET完成一个功能增强的记事本
  5. 视频 + PPT | 企业服务如何破局增长?
  6. JVM调优:定位垃圾的常用算法
  7. SAP ABAP bcset激活时,关联的数据库表条目是如何插入的
  8. $.get、$.post 和 $().load()
  9. 注解形式控制器 数据验证,类型转换(3)
  10. matplotlib scale 刻度
  11. vue-webpack项目本地开发环境设置代理解决跨域问题
  12. 【各学校通用】5分钟刷完天津科技大学雨课堂视频
  13. python图片验证码解决方案
  14. Chrome 页面呈现原理与性能优化(内附分享 ppt)
  15. 阿里巴巴产品实习生23天
  16. 港科夜闻|香港科大商学院举办在线网络研讨会
  17. IT忍者神龟之小程序最全的微信小程序项目实例
  18. 数字图像处理在前端页面中实现
  19. AT、CVT、双离合有什么优缺点?
  20. 单片机c语言中tbb,STM32学习之路入门篇之指令集及cortex——m3的存储系统

热门文章

  1. 表单新增元素与属性(control、placehoulder、list、AutoComplete、pattern、SelectionDirection、indeterminate属性)
  2. 如何将html特殊字符编码转换成特殊字符_html十进制编码字符转回来
  3. 三个实用的提升网页性能技巧
  4. 6.11python 作业
  5. springboot-RequestMappingHandlerMapping
  6. 解决python中join路径分隔符跨平台移植性
  7. 2018-05-05(在小程序中使用图标)
  8. powerdesigner 导出数据库表结构
  9. Eclipse 代码提示无效的解决方法
  10. Linux mmap