C++模板template

news2024/11/22 21:58:24

我们现在有几个变量,我们向要实现他们的交换,所以我们现在写了一个swap函数

 

我们现在可以实现对这两个变量之间的交换, 那么我们有有两个变量需要交换呢??

我们刚才的Swap函数的参数是int类型的,我们现在的两个变量是double类型的,那么我们想要交换double类型的函数可以吗?   不可以

 

但是由于我们的是C++可以实现函数重载,所以我们还可以写一个和刚才的swap函数逻辑完全相同的一个参数为double的函数

 

这下我们有了double类型的Swap函数,我们这下就可以实现刚才的double类型的变量交换了,但是我们有两个逻辑完全相同的函数,仅仅是参数不同,那么我们是比较不舒服的,所以我们在C++中还有一个语法就是模板

函数模板 

下面我们来看一下函数模板

函数模板是什么呢?? 我们拿刚才的Swap函数举例来说,如果我们向实现可以交换任意类型的Swap函数,那么我们应该怎么做呢? 如果我们把所有需要都类型都写一遍那么代码就太冗余了,所以我们不可以这样,下面我们来说一下怎么做

我们来看一下,我们的template就是模板,然后我们的template后面的<>(尖括号),里面是模板参数

 

我们的函数模板后面的类型,除了可以用class 还可以使用typename,而这个T,就是我们的函数的参数类型

我们现在有这几个变量向实现Add,那么我们怎么实现呢?

 

就是这样,那么我看来看一下,是否和我们想要的效果一样

 

 

和我们想要的效果还是一样的,那么我们现在还是想实习Add但是我想实现int 和 double的呢??

 

我们看到出错了

 这里因为我们的函数模板参数只有一个值,但是这里传过去两个int 和 double,所以编译器并不知道用哪一个来定义我们的函数 ,所以这里是实例化不明确导致,那么我们应该怎么解决呢?

模板显示实例化

就是显示实例化

我们的显示实例化,就是在函数后面添加<>里面写上想要实例化的具体类型,这样之间指明道路,我们的编译器也可以帮我们更好的做事

而且我们的模板参数也并不知只能传一个,我们也可以有两个模板参数

 

就是这样,那么我们现在传两个类型的参数即使不用显示实例化,编译器也可以自动推导出来

虽然我们现在可以传两个类型的参数,但是我们的返回类型却只有一个

 类模板

 我们现在有一个stack的类

我们现在有一个程序,现在它有两个Stack的对象,其中一个想存int, 另一个想存 double

 

那么我们应该怎么做呢? 我们是应该 写两份相同的逻辑的代码吗? 显然不是

我们可以使用我们的类模板

就像是这样,如果我们现在既有int 也有double我们想存到Satck里面,我们闲杂ijiu可以依靠我们的模板来帮我们实例化出多份,不需要我们自己实现

但是我们来看一下,我们现在的s1 和 s2却出错了,为什么呢?

因为对于我们的普通类而言 ,我们的类名就是类型,但是对于模板类而言,我们的类名就是类名,我们的类型是类名加<模板参数类型>才是类型

是这样的,由于我们的函数模板有时可以依靠传的值来推测我们的类型,但是类模板却不可以,所以我们的类模板必须要显示实例化

今天的模板就到这里 

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

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

相关文章

ChatGPT 和对话式 AI 的未来:2023 年的进展和应用

人工智能(Artificial Intelligence)在过去一段时间以来以前所未有的速度快速发展。从自动化日常任务到重要提醒的设定,AI以各种方式渗透到我们的生活中。然而,在这个领域中迈出的最重要一步是ChatGPT。 ChatGPT被瑞银(UBS)评为“有史以来增长最快的消费者应用程序”,于…

Cy5.5-PEG-SH近红外荧光PEG试剂 Cyanine5.5-PEG-SH,Thiol-PEG-Cy5.5可用于活体成像

Cy5.5-PEG-SH &#xff0c;Cy5.5聚乙二醇巯基 英文名称&#xff1a;Cy5.5-PEG-SH 中文名称&#xff1a;Cy5.5聚乙二醇巯基 性状: 深蓝色固体或粘性液体&#xff0c;取决于分子量 溶剂&#xff1a;溶于水、 DMSO等常规性有机溶剂 激发/发射波长&#xff1a;684 nm/710 nm …

Windows操作系统重要内容

windows 常用用户&#xff1a; SYSTEM&#xff1a;本地机器上拥有最高权限的用户。&#xff08;为系统核心组件访问文件资源提供权限&#xff09;Administrator&#xff1a;默认系统管理员用户。Guest&#xff1a;只拥有相对较少的权限&#xff0c;默认被禁用。 Windows 常见…

【中医推荐】33部中医书籍,中医医书精品(在线免费阅读),值得珍藏的国粹,涵盖中药、针灸、推拿、按摩、拔罐、气功,食疗等诸多领域

中医诞生于原始社会&#xff0c;春秋战国时期中医理论已基本形成&#xff0c;之后历代均有总结发展。除此之外对汉字文化圈国家影响深远&#xff0c;如日本医学、韩国韩医学、朝鲜高丽医学、越南东医学等都是以中医为基础发展起来的。 中医承载着中国古代人民同疾病作斗争的经…

(华三AC+AP)在华三AC上通过用户mac地址或者IP地址查询在那一台AP下

起因&#xff1a;用户终端的WiFi信号一直不停地断开重连&#xff0c;发现AP的信号消失了&#xff0c;经过检查配置并没有问题&#xff0c;但是在后来发现重启可以让AP恢复使用&#xff0c;但是过一段时间还是会出现这样的问题&#xff0c;因为AP没有备用换下维修&#xff0c;这…

只需浏览器!在线完成Flutter从编程到打包全过程

本文作者&#xff1a;林梓泓 引言 云端 IDE 是基于云的集成开发环境&#xff0c;开发人员可以远程编写运行和调试代码&#xff0c;无需本地安装&#xff0c;仅通过浏览器即可开发软件。 与传统本地开发相比&#xff0c;云端开发环境主要有以下的优势&#xff1a; 快速启动项…

react类组件生命周期基础总结

组件的生命周期是指组件从被创建到挂载到页面中运行起来&#xff0c;再到组件不用时卸载的过程&#xff0c;只有类组件才有生命周期&#xff08;类组件 实例化 函数组件 不需要实例化&#xff09; 生命周期新版本和旧版本的对比图如下&#xff1a; 生命周期&#xff08;constr…

大数据|Spark介绍

前文回顾&#xff1a;Hive和数据仓库 目录 &#x1f4da;为什么会有Spark &#x1f4da;Spark的基本架构和组件 &#x1f407;主要体系结构和组件 &#x1f407;Spark集群的基本结构 &#x1f407;Spark系统的基本结构 &#x1f407;Spark应用程序的基本结构 &#x1f4…

Redis:主从复制_通过此功能实现对内存上的数据更好的保护

什么是主从复制&#xff1f; 简单的意义上来讲就是一个主人带着几个奴隶&#xff0c;奴隶的全部都是主人给他的&#xff0c;刚开始的时候奴隶是一无所有&#xff0c;是主人将自己的一部分给到奴隶了。因此奴隶翻身了&#xff0c;变得有钱了&#xff0c;也就是有一定价值了&…

SYSU程设c++(第十三周)虚函数、覆盖与隐藏

虚函数 形式&#xff1a;是一个类的成员函数&#xff0c;前面有关键字 virtual 作用&#xff1a;在公有继承的派生类中会对虚函数进行重定义。 当使用基类的指针&#xff08;或引用&#xff09;调用派生类的对象的虚函数时&#xff0c;将调用该对象的虚函数的重定义版本 性质&a…

STM32单片机厨房环境油烟温湿度调节系统加湿加热排风

实践制作DIY- GC0131-厨房环境油烟温湿度调节系统 一、功能说明&#xff1a; 基于STM32单片机设计-厨房环境油烟温湿度调节系统 二、功能介绍&#xff1a; 硬件组成&#xff1a;STM32F103C系列最小系统DHT11温度湿度传感器1个5V直流风扇 5V风扇 USB加湿器1个5V直流风扇排烟1…

RestNet详解及在pytorh下基于CIFAR10数据集的实现

1 RestNet介绍 RestNet是2015年由微软团队提出的&#xff0c;在当时获得分类任务&#xff0c;目标检测&#xff0c;图像分割第一名。该论文的四位作者何恺明、张祥雨、任少卿和孙剑如今在人工智能领域里都是响当当的名字&#xff0c;当时他们都是微软亚研的一员。实验结果显示&…

STM32单片机蓝牙APP自动伸缩遮阳棚雨伞雨滴角度温度光强控制

实践制作DIY- GC0130-蓝牙APP自动伸缩遮阳棚 一、功能说明&#xff1a; 基于STM32单片机设计-蓝牙APP自动伸缩遮阳棚 二、功能介绍&#xff1a; 基于STM32F103C系列&#xff0c;LCD1602显示器&#xff0c;光敏电阻采集光强&#xff0c;雨滴传感器&#xff0c;ULN2003控制步进…

MySQL:5.6同步到5.7 GTID报错

问题描述和处理 同步到的版本为5.7.35&#xff0c;按理说在5.7种还是一个比较新的版本了&#xff0c;报错大概如下&#xff1a; 2023-05-14T05:09:47.427031Z 12 [Note] Multi-threaded slave statistics for channel : seconds elapsed 163; events assigned 67585; worke…

GD32 系列FLASH锁死解决.

1.背景描述 使用keil开发工具JLINK调试过程中偶尔出现找不到目标版&#xff0c;或存在目标版但keil调试烧录出现如下界面&#xff1a; 2.问题查询步骤 2.1检查jlink连接线是否异常&#xff1b; 2.2确定boot0和boot1设置是否正确&#xff1b; 2.3确定是否是flash读写保护 2.3.1…

K8s进阶2——二进制搭建K8s高可用集群

文章目录 一、单master资源清单二、系统初始化三、部署etcd集群3.1 生成etcd证书3.2 部署流程3.2.1 准备二进制安装文件3.2.2 创建工作目录3.2.3 创建etcd配置文件3.2.4 设置成systemd服务3.2.5 添加etcd-2和etcd-3节点3.2.6 所有节点启动etcd并设置开机启动 四、安装容器引擎&…

webpack基础

1. 当面试官问Webpack的时候他想知道什么 前言 在前端工程化日趋复杂的今天&#xff0c;模块打包工具在我们的开发中起到了越来越重要的作用&#xff0c;其中webpack就是最热门的打包工具之一。 说到webpack&#xff0c;可能很多小伙伴会觉得既熟悉又陌生&#xff0c;熟悉是…

java汽车4S店管理系统myeclipse定制开发oracle数据库网页模式java编程jdbc

一、源码特点 java汽车4S店管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助 oracle数据库&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 java汽车4S店管理系统myeclipse定制开发orac 二、功能介绍 此次系统…

漏扫工具-xray 1.9.10(文末附下载)

一、工具介绍 一款功能强大的安全评估工具 二、使用说明 1.使用基础爬虫爬取并对爬虫爬取的链接进行漏洞扫描 xray webscan --basic-crawler http://example.com --html-output vuln.html 2.使用 HTTP 代理进行被动扫描 xray webscan --listen 127.0.0.1:7777 --html-outp…

Fiddler如何抓取微信小程序的包

1.简介 有些小伙伴或者是童鞋们说小程序抓不到包&#xff0c;该怎么办了&#xff1f;&#xff1f;&#xff1f;其实苹果手机如果按照宏哥前边的抓取APP包的设置方式设置好了&#xff0c;应该可以轻松就抓到包了。那么安卓手机小程序就比较困难&#xff0c;不是那么友好了。所以…