C++模板初阶速成

news2024/12/23 23:41:23

温馨提示:本篇文章依旧是c++速成系列的文章,但和以往有所不同的是,本篇文章带大家简单了解并能够学会使用模板

 泛型编程

概念:编写与类型无关的通用代码,是代码复用的一种手段。

什么是复用?

简单来说就是套用。那么上面的的概念也就可以理解成写一段通用的代码,给其他代码套用

注意:模板是泛型编程的基础。

模板

模板的种类

函数模板、类模板

函数模板

简单解释一下,template:构建模板的一个关键字,typename是定义模板参数关键字,这里的typename也可以是class             注意:千万不能用struct代替class!!!!!

函数模板的实例化

示例

template<typename T>

T Add(T& left, T& right)

{
    return left + right;

}

int main()

{
int a1 = 10, a2 = 20;

Add(a1,a2);

return 0;

}

这个示例就是模板实例化

当然模板实例化也可以这么玩

template<typename T>

T Add(T& left, T& right)

{
    return left + right;

}

int main()

{
int a1 = 10, a2 = 20;

double a3 = 4.0,  a4 = 5.0;

Add(a1,a2);

Add(a1,  (int)a3);

return 0;

}

之所以使用强转,是因为a1和a3的属性不同,又因为我们在设计模板参数时只设计了一个模板参数,因此要使得两个实参的类型保持一致。

拓展小知识

相信看完上面的解释,已经有小伙伴知道定义的模板参数的个数与实参类型的个数有关。

不错,模板参数的个数与实参的类型个数的确有关,而且还是模板参数类型的个数 == 实参的类型个数

总结:模板参数的个数与实参的类型个数有关   注意:这里的类型个数是指不同类型的个数

除了上面的那种通过强转使得实参的类型保持一致外还有一个方法也可以做到

模板的显式实例化

概念:直接给模板规定好是什么类型,不符合该类型的直接进行强转。  

需要注意的是这里并不是所有的类型都可以互相转换的

并且要是出现类似的错误说明我们在写代码的时候一定是哪个模板实例化时的参数写错了才会出现这个bug

类模板

定义格式:

template<typename T>

class 类名

{
public:

成员函数;

private:

成员变量;

};

示例:

template<typename T>

class Stack

{

public:

Stack(size_t capacity = 4)

{

       _a  = new T[capacity];

      _capacity = capacity;

      _size = 0;

}

void  push(const T& data)

    {
        _a[_size] = data;
        ++_size;
    }
private:

T*   _a;

size_t  _capacity;

size_t  _size;

};

注意:模板的声明和定义不建议分离到两个文件中!!!!

类模板的实例化

定义格式:类名<int>  对象名;

示例:

Stack<int>  st1;

这个就是模板实例化。

本篇文章的内容到这里就结束了,虽然本篇文章的内容没有前面类与对象的内容多,但是建议大家把列出了标题的每个知识点去“消化”一下,比如说概念,如果连模板是个什么东西都不知道,那么又如何继续往下学呢,以及我手敲的代码也自行去敲一下,行今天的内容就到这里,我们下篇文章再见。

都看到这里了,给个三连呗,谢谢啦!!!

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

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

相关文章

分组相关 -- EoO原理

EoO (Ethernet over OTN) 是将以太网信号处理后&#xff0c;经过封装、映射后上OTN系统&#xff0c;通过WDM通道来传送的技术。传统的OTN承载ETH专线&#xff0c;不支持限速&汇聚等场景。引入EoO技术后&#xff0c;支持LAG、QoS、OAM等L2层的功能特性&#xff0c;实现端口限…

RBTree(红黑树)的介绍和实现

欢迎来到杀马特的主页&#xff1a;羑悻的小杀马特.-CSDN博客 目录 ​编辑 一红黑树介绍&#xff1a; 1.1红黑树概念&#xff1a; 1.2红黑树遵循的原则&#xff1a; 1.3红黑树效率分析&#xff1a; 二.红黑树的实现&#xff1a; 2.1红黑树结构&#xff1a; 2.2红黑树节点…

TMGM:下周全球市场分析

本周&#xff0c;美国股市表现强劲&#xff0c;标普500指数和道琼斯工业平均指数均刷新了历史最高记录。这一涨势得到了美联储公开市场委员会&#xff08;FOMC&#xff09;会议纪要的支撑&#xff0c;纪要显示大部分官员都支持9月份实施重大的50个基点降息。 在澳大利亚&#…

宝安网站建设中的响应式设计

宝安网站建设中的响应式设计 在数字化时代&#xff0c;网站已成为企业展示形象、吸引客户的重要平台。而在宝安地区&#xff0c;随着互联网的发展&#xff0c;越来越多的企业意识到响应式设计的重要性。响应式设计不仅能够提升用户体验&#xff0c;还能为企业带来更大的市场竞争…

.NET 一款通过DCOM实现系统提权的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

2024年恩施职称评前公示

此次公示共有422人&#xff0c;初级职称、中级职称、馆员、畜牧师、助理馆员、三级演员、农艺师等均在一起进行评审前的公示。 根据恩施州职称改革工作领导小组办公室《关于报送2024年度恩施州中初级专业技术职务评审材料的通知》&#xff08;恩施州职改办〔2024〕14号&#xf…

04 什么是线性表

什么是线性表 一、为什么需要线性表 例如&#xff1a; ​ 在程序中保存指定班级的所有的学生信息&#xff08;暂时只需要处理姓名、年龄&#xff09;&#xff0c;该班级最多可容纳30人&#xff0c;且可进行数量上的增减。 业务功能&#xff1a; ​ 1&#xff09;这个项目中…

【分布式架构】分布式锁Redission

一、流程图 二、lua脚本实现原理 由setnxexpire实现 setnx&#xff1a;判断key是否存在&#xff0c;如果不存在&#xff0c;则获取锁 setnx的数据结构&#xff1a;<key,<key1,value>> key&#xff1a;业务声明的key key1&#xff1a;线程id value&#xff1a;次数…

css 翻页效果

有一个项目&#xff0c;页面切换的时候要翻页效果。 所以有一个简单的demo&#xff0c;提供给大家学习 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdev…

Golang | Leetcode Golang题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; func findComplement(num int) int {highBit : 0for i : 1; i < 30; i {if num < 1<<i {break}highBit i}mask : 1<<(highBit1) - 1return num ^ mask }

空间计算:现实与数字世界的无缝融合

随着增强现实&#xff08;AR&#xff09;、虚拟现实&#xff08;VR&#xff09;、物联网&#xff08;IoT&#xff09;和人工智能&#xff08;AI&#xff09;的不断进步&#xff0c;空间计算&#xff08;Spatial Computing&#xff09;作为一种新兴技术&#xff0c;正在成为人们…

IDEA Sping Boot 多配置文件application Maven动态切换

新建application-dev.yml与application-prod.yml pom.xml文件下添加profiles等 让idea识别出配置文件 <profiles><profile><id>dev</id><properties><!-- 环境标识&#xff0c;需要与配置文件的名称相对应 --><profiles.active>dev&…

安装和配置k8s可视化UI界面dashboard-1.20.6

安装和配置k8s可视化UI界面dashboard-1.20.6 1.环境规划2.初始化服务器1&#xff09;配置主机名2&#xff09;设置IP为静态IP3&#xff09;关闭selinux4&#xff09;配置主机hosts文件5&#xff09;配置服务器之间免密登录6&#xff09;关闭交换分区swap&#xff0c;提升性能7&…

2013年国赛高教杯数学建模A题车道被占用对城市道路通行能力的影响解题全过程文档及程序

2013年国赛高教杯数学建模 A题 车道被占用对城市道路通行能力的影响 车道被占用是指因交通事故、路边停车、占道施工等因素&#xff0c;导致车道或道路横断面通行能力在单位时间内降低的现象。由于城市道路具有交通流密度大、连续性强等特点&#xff0c;一条车道被占用&#x…

ubuntu22.04 ROS2 - 安装

参考链接:Ubuntu 22.04 LTS安装ROS2 (ros-humble-desktop)-CSDN博客 1、安装测试 ros2 run demo_nodes_cpp listener再开一个终端ros2 run demo_nodes_cpp listener2、小海龟模拟器 ros2 run turtlesim turtlesim_noderos2 run turtlesim turtle_teleop_key两个终端分别执行…

树莓派应用--AI项目实战篇来啦-5.OpenCV绘画函数的使用

1. 介绍 OpenCV作为一款功能强大的计算机视觉库&#xff0c;被广泛地应用于图像处理和计算机视觉领域。 除了在机器视觉和人工智能领域有者广泛的应用&#xff0c;OpenCV 还能够媲美艺术家的创造力&#xff0c;通过其强大的绘图函数&#xff0c;绘制出令人叹为观止的艺术画作。…

【ICESat-2(Ice, Cloud and land Elevation Satellite-2)简介】

ICESat-2&#xff08;Ice, Cloud and land Elevation Satellite-2&#xff09;&#xff0c;即冰、云和陆地高程卫星2号&#xff0c;是美国国家航空航天局&#xff08;NASA&#xff09;的一项重要卫星任务&#xff0c;旨在测量地球冰盖、云层以及陆地的高度变化。以下是对ICESat…

phpstorm+phpstudy 配置xdebug(无需开启浏览器扩展)

今天又被xdebug折磨了&#xff0c;忘记了以前咋配置了现在百度发现好多都是各种浏览器扩展而且也没有真正的用到项目上的都是测试的地址怎么样的 我就简单写一下自己实战吧 不支持workerman swoole hyperf等这种服务框架 如果你会请教教我 工具版本phpstudy8.1.xphpstorm2021.x…

用SpringBoot给Servlet容器Tomcat打war包步骤

首先写一个类来代替启动类 先在SpringBoot项目里打开pom.xml导入依赖,原本SpringBoot里面spring-boot-starter-web依赖里面有Tomcat,所以我们要先在spring-boot-starter-web里面导入依赖,把Tomcat给排除掉,并且加上你要打的war类型依赖 然后先刷新,再清除,最后再打包 成功之后,…

华为云Flexus云服务:性能倍增、体验跃级

在数字化转型的浪潮中&#xff0c;企业对云计算的需求日益增长&#xff0c;尤其是在性能和体验方面。华为云Flexus云服务应运而生&#xff0c;为企业提供了一个性能倍增、体验跃级的云计算解决方案。下面九河云就来给大家介绍一下华为云Flexus云服务吧。 1. 性能倍增 华为云…