【C++】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 )

文章目录

  • 一、类模板
    • 1、类模板引入
    • 2、声明类模板语法
    • 3、调用类模板语法
  • 二、代码示例 - 类模板
    • 1、代码示例
    • 2、执行结果






一、类模板




1、类模板引入


类模板 与 函数模板 的 作用类似 ,

当 多个类 功能相同 , 只是数据类型不同 ,

此时可以 定义一个类模板 代替 定义多个类 ;


借助 " 类模板 " 可以 使用一种模板语法来定义类 , 以实现 处理不同数据类型的类实例 ;

类模板好处 : 使用 类模板 编写出 更加通用和可复用的代码 , 避免重复编写 相同或类似的代码 ;


类模板 常用于 表示 数组 , 线性表 , 树 , 图 等 数据结构 ;

这些数据结构的 节点数据类型 可以使用 类模板 , 同一个数据结构可以存储不同类型的数据 ;

linux 内核链表 就是使用了 类似 类模板 的技术 , 可以存储各种不同类型的数据 , 是一个万能链表 ;


2、声明类模板语法


类模板语法 : 先声明 类型形式参数表 , 然后 使用 类型形式参数表 中的类型 实现 类模板的类声明 ;

template <类型形式参数表>
class 类模板名称
{// 类声明
}

类型形式参数表 的格式如下 : 由若干 typename 泛型类型 组成 , 多个之间使用逗号隔开 ;

typename 泛型类型, typename 泛型类型2, ... , typename 泛型类型n

泛型类型 使用 大写字母表示 , 一般是 T ;

  • 定义一个泛型 : 在尖括号中只 声明 一个泛型 ;
template <typename T>  
  • 定义多个泛型 : 再见括号中 声明 多个泛型 , 泛型之间 使用 逗号隔开 ;
template <typename T, typename X, typename Y>  

类模板示例 : 在下面的 示例 中 , MyClass 是一个类模板 , 在该 类模板 张红使用一个 泛型参数 T 来定义 成员变量 ;

template <typename T>  
class MyClass {  
public:  T value;  MyClass(T val) : value(val) {}  void printValue() {  std::cout << value << std::endl;  }  
};

3、调用类模板语法


调用类模板时 , 首先要 在 类名称后面 使用 尖括号 <> 声明 泛型类型 , 然后创建该 类模板 实例对象 ;

类名<泛型类型> 实例对象名称;

上个章节中的 MyClass 类模板使用示例 :

  • 泛型类型为 int 类型的 类模板 调用 :
MyClass<int> myInt(10); // 创建一个 int 类型的实例  
myInt.printValue(); 	// 输出:10  
  • 泛型类型为 double 类型的类模板调用 :
MyClass<double> myDouble(10.0); // 创建一个 double 类型的实例  
myDouble.printValue(); 		 // 输出:10.0  

类模板中 , 成员变量 T 类型数据 , 可以指定不同的数据类型 ;





二、代码示例 - 类模板




1、代码示例


代码示例 :

在下面的代码中 , 声明了类模板 MyClass , 在其中 声明了 T 泛型类型的 成员变量 ;

创建该 类模板 实例对象 时 , 声明变量时 , 需要先显式指定泛型 T 的类型 , 然后再创建 类对象 ;

#include "iostream"
using namespace std;// 声明类模板
template <typename T>
class MyClass {
public:T value;MyClass(T val) : value(val) {}void printValue() {std::cout << value << std::endl;}
};int main() {// 调用类模板 MyClass<int> myInt(10);         // 创建一个 int 类型的实例  myInt.printValue(); 	        // 输出:10  MyClass<double> myDouble(10.0); // 创建一个 double 类型的实例  myDouble.printValue(); 		    // 输出:10  MyClass<string> myStr("hello"); // 创建一个 string 类型的实例  myStr.printValue();             // 输出:helloreturn 0;
}

2、执行结果


执行结果 :

10
10
hello

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/191166.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shopee跨境选品工具——知虾,助您精准选品和科学运营

在如今的电商时代&#xff0c;shopee跨境选品是每个卖家都面临的重要任务。而Shopee作为一家知名的跨境电商平台&#xff0c;为卖家提供了一系列有用的工具和功能来帮助他们进行精准选品和科学运营。其中&#xff0c;知虾作为Shopee的大数据采集及分析平台&#xff0c;为卖家提…

Java多线程下使用TransactionTemplate控制事务

简介 本文展示了在Java的多线程环境下使用Spring的TransactionTemplate控制事务的提交与回滚&#xff0c;当任何一个子线程出现异常时&#xff0c;所有子线程都将回滚 环境 JDK&#xff1a;1.8.0_211 SpringBoot&#xff1a;2.5.10 说明 本文通过同时写入用户(User)和用户详细…

链式队列的基本操作与实现(数据结构与算法)

链队列的表示与实现如下图&#xff1a; 代码如下&#xff1a; #include<iostream> using namespace std;#define MAXQSIZE 100 //最大队列长度 typedef int QElemType; //typedef struct Qnode {QElemType data;struct Qnode* next; }QNode, *QueuePtr; //队列结点类型…

Os-ByteSec

Os-ByteSec 一、主机发现和端口扫描 主机发现&#xff0c;靶机地址192.168.80.144 端口扫描&#xff0c;开放了80、139、445、2525端口 二、信息收集 访问80端口 路径扫描 dirsearch -u "http://192.168.80.144/" -e *访问扫描出来的路径&#xff0c;没有发现…

电子电器架构 —— 车载网关边缘节点路由转发策略

电子电器架构 —— 车载网关边缘节点路由转发策略 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 PS:小细节,本文字数5000+,详细描述了网关在车载框架中的具体性能设置。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无…

Redis:新的3种数据类型Bitmaps、HyperLoglog、Geographic

目录 Bitmaps简介常用命令bitmaps与set比较 HyperLoglog简介命令 Geographic简介命令 Bitmaps 简介 位操作字符串。 现代计算机使用二进制&#xff08;位&#xff09;作为信息的基本单位&#xff0c;1个字节等于8位&#xff0c;例如“abc”字符串是有3个字节组成&#xff0c…

珠海希雷伺服全套(包含算法)方案

下载链接&#xff01;&#xff01;https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247555038&idx1&sn939a4ad71582abc1f9e93c4d5526fed9&chksmfcfb0409cb8c8d1f74ce7108e20b0310e7399775367a023638624357644dfa4ae435e41c8768&token207079769&l…

解决:Android TextView 设置斜体后右侧文字被遮挡

一、问题说明 遇到一个比较奇怪的情况&#xff0c;给 TextView 文字设置倾斜后&#xff0c;右侧的文字会被遮挡&#xff0c;感觉这应该是 Android 的一个 bug &#xff01; 上代码&#xff1a; <TextViewandroid:id"id/tv_title"android:layout_width"wra…

文件加密软件哪个好用丨真心推荐丨良心建议

在保护企业文件和数据方面&#xff0c;文件加密软件是一种非常重要的工具。以下是我推荐好用的文件加密软件&#xff0c;以及我的良心建议。 一、WinRAR。WinRAR是一款免费的文件压缩和解压缩工具&#xff0c;同时也提供了强大的文件加密功能。使用WinRAR可以轻松地加密文件夹和…

3D建模基础教程:编辑样条线【子层级】

了解子层级编辑样条线 在3D建模中&#xff0c;样条线是创建各种形状和曲线的重要工具。而编辑样条线是3D建模过程中不可或缺的一部分。今天&#xff0c;我们将一起学习如何编辑样条线&#xff0c;以及了解其子层级的相关知识。 样条线的子层级介绍 样条线的子层级包括&#xff…

KVM Cloud云平台

项目介绍 KVM Cloud 是一款基于Java实现的轻量级私有云平台&#xff0c;旨在帮助中小企业快速实现计算、存储、网络等资源的管理&#xff0c;让企业拥有自己的云平台&#xff0c;包括但不限于如下功能: 1、基于KVM的VM基础功能(创建、启动、停止、重装、webVNC等功能) 2、使用…

Zabbix Proxy分布式监控

目录 Zabbix Proxy简介 实验环境 proxy端配置 1.安装仓库 2.安装zabbix-proxy 3.创建初始数据库 4.导入初始架构和数据&#xff0c;系统将提示您输入新创建的密码 5.编辑配置文件 /etc/zabbix/zabbix_proxy.conf&#xff0c;配置完成后要重启。 agent客户端配置 zabbix…