【C++打怪之路Lv7】-- 模板初阶

news2024/11/24 8:47:32

🌈 个人主页:白子寰
🔥 分类专栏:C++打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分82+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)

目录

泛型编程

函数模板

函数模板概念

函数模板格式

函数模板的原理

函数模板的实例化

隐式实例化

显式实例化

模板参数的匹配原则

类模板

类模板的定义格式

类模板的实例化


泛型编程

我们之前写swap(交换两个变量),不同类型的是不是得重复写一个函数名相同、参数不同的函数【函数重载】

可是像这种泛型编程,有两种弊端

①代码复用率低

②代码维护性低

那有没有只写一个函数就能解决不同参数实现函数swap(交换)呢?




函数模板

函数模板概念

函数模板是一种代码复用机制,它允许编写与数据类型无关的函数定义,使得同一个函数可以处理多种不同类型的参数

简而言之,函数模板提供了类型参数化的能力


函数模板格式

一般推荐使用关键词class 

 在主函数中,两个函数名一样,调用这两个函数的地址相同吗?

 

根据反汇编的可以看到,它们的地址是不一样的


函数模板的原理


函数模板的实例化

隐式实例化

当函数模板被调用时,编译器会根据传递给模板的参数类型自动生成函数的特定版本

这个过程称为隐式实例化。

编译器会在需要的时候自动创建一个特定类型的函数版本


显式实例化

显式实例化是指程序员明确告诉编译器为特定的类型创建模板函数的实例

显式实例化通常用于模板代码的分离编译,或者当编译器无法自动推导模板参数时

接上面代码,我想把变量b转换为double怎么转?

有两种方式


 看看下面这个函数显式实例化的方式


模板参数的匹配原则

当一个非模板函数与一个函数模板具有相同的名字和相同的调用形式时,非模板函数将优先于模板函数被调用
如果需要调用模板函数,则可以通过显式实例化来实现。
模板实例化与非模板函数可以构成重载关系




类模板

类模板的定义格式

template <typename T>
class ClassName {
    // 类成员声明
public:
    ClassName() { /* 构造函数代码 */ }
    ~ClassName() { /* 析构函数代码 */ }
    // 其他成员函数和数据成员
    void memberFunction(T param) {
        // 使用类型T的函数实现
    }
    
    T dataMember; // 使用类型T的数据成员

    // ...
};

那支持多个参数不同的类型该怎么定义? 

template <typename T1, typename T2, ...>
class ClassName {
    // 类成员声明
public:
    // ...
};

类模板的实例化

解释:

Stack构造函数传有参数 ,创建对象时要提供参数




***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。

等等等等一下,分享最近喜欢的一句话:

“以结果为导向,主动去争取”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的设备管理系统源码带本地搭建教程

技术框架&#xff1a;SpringBoot mybatis thymeleaf Mysql5.7 Fastjson Druid Shiro 运行环境&#xff1a;jdk8 IntelliJ IDEA maven 宝塔面板 系统功能&#xff1a;登陆&#xff0c;注册&#xff0c;系统用户管理&#xff0c;角色&#xff0c;部门管理&#xff0c;…

如何在电脑上创建虚拟网卡

1.右键点击此电脑&#xff0c;选择——管理 2.选择设备管理器——网络适配器&#xff0c;在点击操作选择 添加过时硬件 3.点击 下一页 4.在这里选择网络适配器&#xff0c;点击下一页 5.选择微软的环回适配器 6.打开控制面板 7.点击网络和Internet 8.点击网络和共享中心 9…

多表数据实时同步和批量实时同步怎么高效实现?

对于企业来说&#xff0c;准确、及时的数据是进行数据分析和决策支持的基础。如果各个系统中的数据不能及时同步&#xff0c;就会影响数据分析的结果和决策的准确性。通过数据同步&#xff0c;可以将企业内部各个系统中的数据整合到一个数据仓库或数据分析平台中&#xff0c;为…

Jenkins打包,发布,部署

一、概念 Jenkins是一个开源的持续集成工具&#xff0c;主要用于自动构建和测试软件项目&#xff0c;以及监控外部任务的运行。与版本管理工具&#xff08;如SVN&#xff0c;GIT&#xff09;和构建工具&#xff08;如Maven&#xff0c;Ant&#xff0c;Gradle&#xff09;结合使…

【LeetCode刷题】:双指针篇(移动零、复写零)

文章目录 一、移动零1. 题目解析2. 算法原理3. 代码编写 二、复写零1. 题目解析2. 算法原理3. 代码编写 一、移动零 1. 题目解析 题目&#xff1a;移动零【点击跳转题目】 大致题意就是将数组中所有为0的元素往后移&#xff0c;移到数组的末尾&#xff0c;但是所有的非零元素…

shell脚本写代码

用简单的test语句来判断是否闰年 #! /bin/bash read -p "sd " yearif [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ]thenecho "是润年"elseecho "不是闰年" fi判断一个数是否为偶数 #! /bin/bash read -p "…

PDF怎么转换成TXT文本?这4个方法简单还免费,pdf转txt就靠它!

PDF怎么转换成TXT文本&#xff1f;PDF文件虽然广泛支持&#xff0c;但在某些设备或软件上可能无法完全正确显示&#xff0c;尤其是当文件包含特殊字体或复杂布局时。此外&#xff0c;PDF文件的阅读体验也可能受到格式干扰&#xff0c;如复杂的背景颜色或字体样式。将PDF转换为T…

ABeam 德硕 | 在华外企ESG议题选择指南(1)—— 全球ESG发展趋势及行业环境

在华外企 ESG议题选择指南 系列文章&#xff08;1&#xff09; 引言 ESG议题*在全球投资领域迅速升温&#xff0c;根据全球可持续投资联盟&#xff08;GSIA&#xff09;[1]发布的《2022可持续投资报告》[2]&#xff0c;全球可持续投资规模高达30.3万亿美元&#xff0c;占总…

深度学习-图像处理篇-7MobileNet

MobileNetV1: 深度可分卷积操作 优势 MobileNetV2: MobileNetV3:

如何优化电源模块自动化测试的硬件设计?-纳米软件

电源模块在电子设备中起着至关重要的作用&#xff0c;其性能的好坏直接影响整个系统的稳定性和可靠性。随着科技的不断发展&#xff0c;对电源模块的性能要求越来越高&#xff0c;因此&#xff0c;电源模块自动化测试变得尤为重要。其中&#xff0c;硬件设计是实现高效、准确自…

OmniCorpus数据集:最大(百亿级别)多模态数据集

2024-06-12 &#xff0c;由上海人工智能实验室、哈尔滨工业大学、南京大学、复旦大学等联合创建OmniCorpus&#xff0c;一个达到百亿级别的图文交错数据集。它不仅规模空前&#xff0c;更以其多元化的数据来源和高质量的数据内容&#xff0c;为多模态大语言模型的研究提供了坚实…

揭秘Xinstall:如何实现H5页面与App间的无缝链接跳转?

在移动互联网时代&#xff0c;用户在不同应用间的切换已成为常态&#xff0c;而如何高效、便捷地引导用户从网页跳转到App指定页面&#xff0c;成为了众多开发者关注的焦点。今天&#xff0c;我们就来聊聊一种名为“深度链接&#xff08;Deep Linking&#xff09;”的技术&…

hznu.dodo C++ 实验A 文件

1.【描述】 输入10个整数存入文本文件example.txt中&#xff0c;文件每行存放5个整数&#xff0c;每行整数之间用一个空格间隔。行末不能有多余的空格。 【输入】 输入10个整数。 【输出】 生成文件example.txt&#xff0c;里面存放输入的10个整数。 不需要在屏幕上显示整数。 …

FineReport批量处理列宽

1、选定多列 2、右击 3、设置列宽

Library介绍(四)

标准单元描述 标准单元主要由以下几个部分构成&#xff0c;分别是引脚电容、power、timing组成。其中引脚电容主要包含input/output pin的电容值。 power主要包含每个pin的leakage power和internal power。 timing主要包括cell的input pin到output pin的rise delay和fall del…

变换器(Transformer)在医学成像中的应用(上)

在自然语言任务上取得前所未有的成功之后&#xff0c;Transformer已被成功应用于多个计算机视觉问题&#xff0c;取得了最先进的结果&#xff0c;并促使研究人员重新考虑卷积神经网络(CNNs)作为事实上标准操作符的优势地位。利用计算机视觉领域的这些进展&#xff0c;医学影像领…

异业联盟,新名词 助力企业生态共存体!

在当今这个快速变化的市场环境中&#xff0c;单一企业的力量往往难以独自应对激烈的竞争和不断变化的消费者需求。 异业联盟模式应运而生&#xff0c;它像一座桥梁&#xff0c;连接起不同行业、不同领域的商家或企业&#xff0c;通过资源共享、优势互补和互利共赢的合作方式&am…

Xinstall带你解锁App下载归因新姿势,轻松搞定推广难题

在移动互联网时代&#xff0c;App的推广和运营对于产品的成功至关重要。然而&#xff0c;推广者在App推广过程中面临着诸多痛点&#xff0c;其中最关键的问题之一就是如何准确追踪和分析App的下载归因。这时候&#xff0c;Xinstall作为专业的App下载归因工具&#xff0c;成为了…

介绍一下SAP 函数 NUMBER_GET_NEXT的妙用——获取SAP编码OBJECT

NUMBER_GET_NEXT 是 SAP 中用于获取下一个可用编号的函数模块&#xff0c;通常用于生成唯一的编号或序列号。这个函数模块的妙用在于它能够确保编号的唯一性和连续性&#xff0c;适用于需要生成订单号、发票号或其他业务对象编号的场景。 我在写ABAP程序时经常要调用这个函数来…

对序列化反序列化在项目中的使用优化

文章目录 序列化是什么&#xff1f;常见的序列化协议使用序列化反序列化序列化List反序列化List 查看源码&#xff0c;分析不足进行改善 序列化是什么&#xff1f; 如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中&#xff0c;或者在网络传输 Java 对象&#xff0c…