当前位置: 首页 > news >正文

C++ 类模板

类模板定义

tempalte  < class   Type>

    关键字tempalte是告诉编译器,将要定义一个模板。关键字class可以看作是变量的类型名,该变量接受类型作为其值,把Type看作变量名称。 当模板被调用时,Type将被 具体的类型值(如 int 或 string)取代。 在较新的C+±中允许使用typename代替class,格式如下所示:

template < typename  Type>

    模板成员函数替换原有类的类方法,每个函数头都将添加相同的模板声明前缀:

tempalte <class Type>

    类模板的限定符由类名:: 改为类名:: 。如果在类声明中定义了方法(内联定义),则可以省略模板前缀和类限定符。
需要特别注意模板不是函数,不能单独编译,模板成员函数的定义必须和类模板的定义放在一个头文件中,不能将模板成员函数的实现放在一个独立的实现文件中。

下面以Stack类模板为例进行说明:

// stackp.h --   a stack template
#ifndef STACKP_H_
#define STACKP_H_// template <class Type> 表明接下来声明Stack类模板。可以替换为tempalte <typename  Type>
template <class Type>
class Stack
{
private:enum {MAX = 10};// 此处的Type为类模板实例的类型,具体为什么类型由实例时确定。如果实例时指定Type为int,则下面表示int items[MAX]Type items[MAX];int top;
public:// 内联方式定义类模板成员函数模板。不需要前缀:tempalte <typename  Type> 和 类限定符:Stack<Type>::Stack(){top = 0;}bool isempty();...
};// 非内联方式(类外部定义成员函数)定义成员函数模板
template <class Type>		// 模板前缀
bool Stack<Type>::isempty()// 类限定符是Stack<Type>::, 而非Stack::
{return top == 0;
}
...
#endif

使用模板类

    要使用模板类,除了包含模板类的头文件,还需要对类模板进行实例化。以上诉的Stack模板类为例创建的两个栈。编译器按照Stack模板生成两个独立的类声明和两组独立的类方法。

Stack<int> kernels;	//存储int的栈
Stack<string> colonels;	// 存储string的栈
http://www.dtcms.com/a/322668.html

相关文章:

  • 使用langchain框架开发一个能调用工具的聊天助手Demo
  • MCU-基于TC397的启动流程
  • SQL基本
  • “自动报社保 + 查询导出 ” 的完整架构图和 Playwright C# 项目初始化模板
  • 2022 RoboCom 世界机器人开发者大赛-本科组(国赛)
  • 【阿里巴巴大数据实践之路学习记录】第十章-维度设计
  • 算法_python_学习记录_02
  • Docker大全
  • 通过 Docker 运行 Prometheus 入门
  • 开源智能手机安全相机推荐:Snap Safe
  • 数据结构(9)——排序
  • 【C++上岸】C++常见面试题目--数据结构篇(第十五期)
  • 搜索算法经典案例
  • SpringSecurity过滤器链全解析
  • navicat 连接docker容器里面mysql服务失败解决
  • 传输线的瞬时阻抗
  • UE破碎Chaos分配模型内部面材质
  • Jmeter性能测试之安装及启动Jmeter
  • Nginx 安全加固与服务监控体系
  • 如何无损压缩图片至原大小的10%?
  • ComfyUI——舒服地让大模型为我所用
  • 常用性能测试工具及使用方法介绍
  • 【内核配置】CONFIG_DEBUG_USER 配置项原理分析
  • 线程安全的单例模式,STL和智能指针
  • golang的二维数组
  • 直接插入排序算法:可视化讲解与C语言实现
  • 【R语言】单细胞数据整合质量评估(3)
  • Matlab 基于BP神经网络结合Bagging(BP-Bagging)集成算法的单变量时序预测 (单输入单输出)
  • Linux运维新手的修炼手扎之第26天
  • Effective C++ 条款31: 将文件间的编译依存关系降至最低