1.类模板定义:

在C++的Template中很多地方都用到了typename与class这两个关键字,有时候这两者可以替换,那么这两个关键字是否完全一样呢?

事实上class用于定义类,在模板引入c++后,最初定义模板的方法为:template<class T>,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,这样在定义模板的时候可以使用下面的方式了:

template<typename T>.在模板定义语法中关键字class与typename的作用完全一样

2.类模板与模板类 :

  一个类模板(类生成类)允许用户为类定义个一种模式,使得类中的某些数据成员、默认成员函数的参数,某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。

  如果一个类中的数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表一类类。

3.关于类模板的使用:

类模板的使用实际上是将类模板实例化成一个具体的类,它的格式为:类名<实际的类型>

模板类是类模板实例化后的一个产物,说个具体点的例子吧,我们把类模板比作是一个做饼干的模子,而模板类就是用这个模子做出来的饼干,至于这个饼干是什么味道的就要看你自己在实例化时用的是什么材料了,你可以做巧克力饼干,也可以做牛奶饼干,这些饼干出了材料不一样外,其它的东西都是一样的了。

4.使用条件:

如果某个函数对所有的 数据类型 (int  double float string...)都进行相同的处理,就应该把它编写成一个模板。

如果某个函数对不同的数据类型进行不同的处理,就应该对它进行重载。


5.代码示例:类模板实现 栈操作

// classTemplate.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <iostream>
#include <string>template <class T>  //构造一个类模板 :栈的实现
class Stack
{
public:Stack(unsigned int size = 100);~Stack();void push(T value);  //入栈T pop();             //出栈
private:unsigned int size;   //栈初始尺寸unsigned int sp;     //栈指针位置T *data;             //指向栈中存放的数据 的指针
};//类模板中方法的定义template <class T>
Stack<T>::Stack(unsigned int size)
{this->size = size;data = new T[size];   //初始化栈 分配大小 指向第一个数据sp = 0;               //初始化指针位置为0
}
template <class T>
Stack<T>:: ~Stack()
{delete []data;data = NULL;
}
template<class T>
void Stack<T>::push(T value)
{data[sp++] = value;
}
template < class T >
T Stack<T>::pop()
{return data[--sp];
}int main()
{Stack<int> intStack =Stack<int>(100);//Stack<int> intStack(100); 初始化写法2intStack.push(1);intStack.push(2);intStack.push(3);std::cout << intStack.pop() << "\n";std::cout << intStack.pop() << "\n";std::cout << intStack.pop() << "\n";return 0;
}

6.拓展

C++并没有限制只能使用一个类型占位符,如果类模板中国要使用一种以上的类型,根据具体情况多使用几个占位符即可

如:

template<class T, class U>

class MyClass

{

};

实例化时,我们只需要这么做:
Myclsaa <int, float> myClass;

C++_class Template about Stack(使用类模板实现栈操作)相关推荐

  1. C++ template类模板实现栈 pop push

    心得 data = new T[size];这句太坑了,一开始写成了data = new T(size)圆括号,所以一直随机性报错. 我本来以为是ide的问题,在vs2017里就会崩,在dev里不会崩 ...

  2. c++ 模板类实现堆栈实验报告_C++类模板实现栈

    定义类模板: template class 类名 {.....}; stack.h #define maxsize 10 template class myStack { private: type ...

  3. 用C++类模板实现栈结构出现的问题以及思考

    C++中使用了模板来减少方法相同但是类型不一样带来的函数重载以及大量复制代码的问题.这里主要说说类模板     类模板的定义:     template<TYPENAME Type>   ...

  4. ZT 类模板Stack的实现 by vector

    *//*第3章 类模板 与函数相似,类也可以被一种或多种类型参数化.容器类就是一个具有这种特性的典型例子,它通常被用于管理某种特定类型的元素.只要使用类模板,你就可以实现容器类,而不需要确定容器中元素 ...

  5. C++类模板 template class T详细使用方法

    C++类模板 template <class T>详细使用方法 类模板与函数模板的定义和使用类似. 有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类: cl ...

  6. c语言模板类,C++类模板(Class Template)

    C++ 除了支持函数模板,还支持类模板(Class Template).函数模板中定义的类型参数可以用在函数声明和函数定义中,类模板中定义的类型参数可以用在类声明和类实现中.类模板的目的同样是将数据的 ...

  7. 【C++模板】类模板的全部特例化和局部特例化(偏特化-partial specialization)

    前言 本专栏所有的文章都需要一定的基础知识.在文中对于基础的概念将会一带而过,或者在其他文章有讲,会贴出对应的链接而不再进行赘述. 目录 前言 类模板的Stack实现 类模板的全部特例化(偏特化) 写 ...

  8. 函数模板和类模板的区别

    转自:http://blog.csdn.net/csw_100/article/details/5844615 函数模板与类模板有什么区别? 答:函数模板的实例化是由编译程序在处理函数调用时自动完成的 ...

  9. C++函数模板与类模板的区别

    类模板: C++ 除了支持函数模板,还支持类模板(Class Template).函数模板中定义的类型参数可以用在函数声明和函数定义中,类模板中定义的类型参数可以用在类声明和类实现中.类模板的目的同样 ...

  10. C++——类模板库(STL)

    类模板库的定义 1.类模板库(STL) 2.类模板的定义 3.类模板实例化 4.类模板的成员函数 5.类模板的静态数据成员 关于模板的更多的内容,参见以下链接: C++--成员模板 C++--友元模板 ...

最新文章

  1. python Flask框架如何请求及返回数据——flask详细教程
  2. Deep Learning(深度学习)学习笔记整理系列 一
  3. 多线程编程之死锁已经死锁产生的原因
  4. 自定义一个SharedPreferences工具类
  5. mysql主从复制gtid_详解MySQL主从复制实战 - 基于GTID的复制
  6. 动态表单实现客户端二次过滤及字段汇总统计
  7. ejb 2.0 3.0_Java EE 6测试第I部分– EJB 3.1可嵌入API
  8. 质量码_在验证牛顿第二定律实验为什么要保证槽码质量m远远小于小车质量M?...
  9. while用法_when 和 while 的用法区别
  10. cython 安装升级_Anaconda安装pytorch,torchvision和 cython
  11. 亲历漏洞研究最让人难受的地方:看到打补丁版本,才知漏洞一直近在眼前(详述)...
  12. 对开源库 limdu 命令注入漏洞 (CVE-2020-4066) 的简要分析
  13. pytorch---tensor概念的介绍
  14. python如何预处理文本分类_文本分类二之文本预处理
  15. 5G通信协议(MAC 层简介)
  16. TeamViewer在windows2003上如何免费使用
  17. 国产开源数据可视化套件Cboard使用
  18. 百度开源地图服务器搭建
  19. mysql中存储ip地址,将ip转换为整数存储
  20. 计算机毕业设计基于Android平台的公交线路查询系统app

热门文章

  1. Leetcode46. Permutations全排列
  2. cmd进入mysql界面的命令
  3. remoting 中事件找不到订阅者时引发异常的解决办法
  4. Spring定时器技术终结者——采用Scheduled注释的方式实现Spring定时器
  5. Struts2中的ValueStack类
  6. etc profile 的使用
  7. string进行大小写转换
  8. 阅读Java程序_几道java程序阅读题 不知道能不能用到 给大家分享一下
  9. mysql 主从库_MySQL数据库之mysql 主库有数据通过锁库做主从
  10. html 设置自动检测编码格式,CSS代码检查工具stylelint的使用方法详解