【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();             // 输出:hello

	return 0;
}

2、执行结果


执行结果 :

10
10
hello

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python (十) 元组

元组 元组与列表类似&#xff0c;不同之处在于元组的元素不能修改。 元组使用小括号 ( )&#xff0c;列表使用方括号 [ ]。 元组创建只需要在括号中添加元素&#xff0c;并使用逗号隔开即可。 访问 tup1 (hello,Java,Python,123,456) print(type(tup1)) print(tup1[1])#输出 …

微信个人号api

简要描述&#xff1a; 登录E云平台 请求URL&#xff1a; http://域名地址/member/login域名地址开发者账号密码:后台系统自助开通 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/json 参数&#xff1a; 参数名必选类型说…

F. Alex‘s whims Codeforces Round 909 (Div. 3) 1899F

Problem - F - Codeforces 题目大意&#xff1a;有q次询问&#xff0c;每次询问给出一个数x&#xff0c;要求构造一棵n个点的树&#xff0c;使得对于每次询问&#xff0c;树上都有一条简单路径的长度等于x&#xff0c;同时每次询问前可以对树进行一次操作&#xff0c;即将一个…

ForkLift:macOS文件管理器/FTP客户端

ForkLift 是一款macOS下双窗口的文件管理器&#xff0c;可以代替本地的访达。ForkLift同时具备连接Ftp、SFtp、WebDav以及云服务器。 ForkLift还具备访达不具备的小功能&#xff0c;比如从文件夹位置打开终端&#xff0c;显示隐藏文件&#xff0c;制作替换等功能。ForkLift 是一…

css继承属性

在css中&#xff0c;继承是指的是给父元素设置一些属性&#xff0c;后代元素会自动拥有这些属性 关于继承属性&#xff0c;可以分成&#xff1a; 字体系列属性文本系列属性元素可见性表格布局属性列表属性引用光标属性 继承中比较特殊的几点&#xff1a; a 标签的字体颜色不…

Python采集智联招聘网站数据实现可视化数据

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python Pycharm模块使用: selenium --> pip install selenium3.141.0 time csv驱动下载地址: https://googlechromelabs.github.io/chrome-for-te…

MATLAB中std函数用法

目录 语法 说明 示例 矩阵列的标准差 三维数组的标准差 指定标准差权重 矩阵行的标准差 数组页的标准差 排除缺失值的标准差 标准差和均值 标准差 std函数的功能是得到标准差。 语法 S std(A) S std(A,w) S std(A,w,"all") S std(A,w,dim) S std(A…

ExcelBDD PHP Guideline

在PHP里面支持利用Excel的BDD&#xff0c;也支持利用Excel进行参数化测试 ExcelBDD Use Excel file as BDD feature file, get example data from Excel files, support automation tests. Features The main features provided by this library are: Read test data acco…

1334. 阈值距离内邻居最少的城市/Floyd 【leetcode】

1334. 阈值距离内邻居最少的城市 有 n 个城市&#xff0c;按从 0 到 n-1 编号。给你一个边数组 edges&#xff0c;其中 edges[i] [fromi, toi, weighti] 代表 fromi 和 toi 两个城市之间的双向加权边&#xff0c;距离阈值是一个整数 distanceThreshold。 返回能通过某些路径…

Spring学习②__IOC分析

目录 IOC控制反转IOCIOC理论案例IOC的思想&#xff08;注入&#xff09;IOC底层什么是 IOCIOC 底层原理 总结 IOC 控制反转IOC ①控制反转&#xff0c;把对象创建和对象之间的调用过程&#xff0c;交给Spring进行 ②使用IOC目的&#xff1a;为了耦合度降低 IOC理论案例 控制…

基于算术优化算法优化概率神经网络PNN的分类预测 - 附代码

基于算术优化算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于算术优化算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于算术优化优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

量化交易:开发传统趋势策略之---双均线策略

本文以双均线策略为例&#xff0c;描述如何在BigQuant策略平台上&#xff0c;开发一个传统的趋势跟踪策略&#xff0c;以更好地理解BigQuant回测机制。 双均线策略的策略思想是&#xff1a;当短期均线上穿长期均线时&#xff0c;形成金叉&#xff0c;此时买入股票。当短期均线…

搜索二叉树(二叉搜索树)的实现(递归与非递归)

一、搜索二叉树的概念 搜索二叉树又称二叉排序树&#xff0c;二叉搜索树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点…

微信小程序动态生成表单来啦!你再也不需要手写表单了!

dc-vant-form 由于我们在小程序上涉及到数据采集业务&#xff0c;需要经常使用表单&#xff0c;微信小程序的表单使用起来非常麻烦&#xff0c;数据和表单是分离的&#xff0c;每个输入框都需要做数据处理才能实现响应式数据&#xff0c;所以我开发了dc-vant-form&#xff0c;…

buildadmin+tp8表格操作(2)----表头上方按钮绑定事件处理,实现功能(全选/全不选)

buildAdmin 表格上方的按钮添加完成之后&#xff0c; 就要对其实现功能了 有了上面的说明&#xff0c; 我就只要得到了 ref 中的表格对象&#xff0c; 就可以象el-table 一样来操作表格的属性和方法了 我们来实现上面的几个按钮的方法 全选/全不选 上面就是添加按钮功能的全过…

小程序申请,商户号申请,微信支付开通操作流程

总目录 文章目录 总目录前言1 申请商户号&#xff08;如已有商户号跳过&#xff09;1 申请流程与资料2 详细申请步骤 2 申请开通接入微信支付步骤3 申请微信小程序1 申请小程序步骤2 查看小程序AppID 4 微信支付普通商户与AppID账号关联结语 前言 本文主要讲解如何申请微信商户…

私有云边界网络部署实践

业务背景 在私有云的业务场景中&#xff0c;常见的通信中包含了同VPC内虚机互访、不同VPC之间的虚机互访、VPC访问Underlay资源、VPC访问Internet资源、VPC提供服务&#xff0c;被Internet访问、VPC与专线网络之间互访等&#xff1b;实际应用中&#xff0c;大多数云业务通信场…

vue解除数据双向绑定

let obj JSON.parse(JSON.stringify(data));例如&#xff0c;table列表中&#xff0c;点击编辑时&#xff0c;可对val进行如上操作来解除双向绑定

运行软件报错mfc140.dll丢失?分享mfc140.dll丢失的解决方法

小伙伴们&#xff0c;你是否也有过这样的经历&#xff1a;每当碰到诸如" mfc140.dll 丢失 "之类的烦人错误时&#xff0c;你是不是会一头雾水&#xff0c;完全不知道从何下手去解决&#xff1f;不要担心&#xff0c;接下来咱就给你提供这样一篇实用教程&#xff0c;教…

适合家电和消费类应用R7F101GEE4CNP、R7F101GEG4CNP、R7F101GEG3CNP、R7F101GEE3CNP新一代RL78通用微控制器

典型应用 • 电机控制 • 电源 • 照明 • 一般用途 • 消费类应用 • 家用电器 • 工业自动化 • 楼宇自动化 器件选型 1、R7F101GEE4CNP&#xff1a;16BIT MCU RL78/G24 64K 40HWQFN -40C 至 125C 2、R7F101GEG4CNP&#xff1a;16BIT MCU RL78/G24 128K 40HWQFN -40C 至 …