当前位置: 首页 > news >正文

从C++开始的编程生活(9)——模板初阶

前言

本系列文章承接C语言的学习,需要有C语言的基础才能学会哦~
第8篇主要讲的是有关于C++的模板初阶
C++才起步,都很简单!!

目录

前言

模板初阶

基本语法

函数模板的实例化

显式实例化的作用

类模板

基本语法


模板初阶

模板,也就是函数模板,调用实例化后才会成为函数。

基本语法

没使用模板前,我们为了适配不同的数据类型,需要写三个甚至更多的Swap函数,但他们的逻辑是类似的,甚至完全一样

void Swap(int& left, int& right)
{int temp = left;left = right;right = temp;
}
void Swap(double& left, double& right)
{double temp = left;left = right;right = temp;
}
void Swap(char& left, char& right)
{char temp = left;left = right;right = temp;
}

代码1↑

使用模板后

//模板
template<typename T>
void Swap(T& left, T&right)
{T temp = left;left = right;right = temp;
}int main()
{int x = 0, y = 1;double m = 1.1, n = 2.2;//调用Swap(x, y);Swap(m, n);return 0;
}

代码2↑

typename是关键字也可以用class,两者有些许区别,后面再讲。
T为模板参数,可以有多个模板参数,逗号分隔,模板参数在实例化时可替换为数据类型,同一个模板参数只能替换为同一个数据类型。
调用时,编译器会根据传入参数推演,把T替换为对应的数据类型,由编译器帮助生成实例化函数。Swap(x,y)会实例化为代码1中的第一段Swap,Swap(m,n)会实例化为第二段Swap,调用的是不同的函数

函数模板的实例化

分为隐式实例化显式实例化

​//模板
template<typename T>
void Swap(T& left, T&right)
{T temp = left;left = right;right = temp;
}//隐式实例化
Swap(x, y);
Swap(m, n);
//或者自行强制类型转化
Swap(x, (int)n);
Swap((double)x, n);//显式实例化
Swap<int>(x, m);
Swap<double>(x, m);

隐式实例化:编译器根据实参推演模板参数的实际类型。
显式实例化:用尖括号<>指明模板参数的替换。

显式实例化的作用

T func(size_t n)
{return T;
}

如上函数,代码无法通过函数参数推演出模板参数要替换成的实际类型,因此需要显式实例化指明类型。

func<int>(2);

tips1:如果运行代码Add(2, 3),程序会调用哪段代码?

int Add(int a, int b)
{return a + b;
}template<class T>
T Add(T a, T b)
{return a + b;
}

会调用第一段代码,有现成的用现成的,减少推演的步骤,提高效率。
如果非要调用模板,那就运行代码Add<int>(2, 3),用显式实例化让程序使用模板

tips2:如果运行Add(1.1, 2),就运行第三段模板代码;如果运行Add(1.1, 2.2),就运行第二段模板代码

​
int Add(int a, int b)
{return a + b;
}template<class T>
T Add(T a, T b)
{return a + b;
}​template<class T1, class T2>
T1 Add(T1 a, T2 b)
{return a + b;
}

哪个方便用哪个。

类模板

与函数模板用法十分类似。

基本语法

template<typename T>
{
public:Stack(size_t capacity = 4){_array = new T[capacity];_capacity = capacity;_size = 0;}void Push(const T& data);private:T* _array;size_t _capacity;size_t _size;
};template<class T>
void Stack<T>::Push(const T& data)
{_array[_size++] = data;//········
}

同上:
是模板,不是实体,需要实例化
②分为隐式实例化显式实例化
同一模板参数替换的数据类型不同的时候,实例化出来的对象不属于同一类
哪个模板方便推演用哪个现成的就用现成的

tips:
类模板的声明与定义分离需要注意——定义的时候要带上模板参数

函数参数和模板参数十分类似,前者传递的是对象,后者传递的是数据类型。而且都可以用缺省参数

❤~~本文完结!!感谢观看!!接下来更精彩!!欢迎来我博客做客~~❤


文章转载自:

http://Xg2w9I3s.prprz.cn
http://VMOeXB3M.prprz.cn
http://fRJJN2dW.prprz.cn
http://OkzffmbW.prprz.cn
http://Tm35GKWd.prprz.cn
http://Ftv5lQd3.prprz.cn
http://2qadG77D.prprz.cn
http://kc5lIQjD.prprz.cn
http://1MbdsliI.prprz.cn
http://kC7RhYEl.prprz.cn
http://mhvBrtv8.prprz.cn
http://UYsm1bsd.prprz.cn
http://SSn5Fn91.prprz.cn
http://wCwc5xgL.prprz.cn
http://fqIQqoNr.prprz.cn
http://wjiOpyNe.prprz.cn
http://R4O3fwGH.prprz.cn
http://YZFx2dxr.prprz.cn
http://XemIsA8A.prprz.cn
http://UPZUBp8y.prprz.cn
http://Htq7B8IY.prprz.cn
http://lV4TAmQr.prprz.cn
http://09cBdEGW.prprz.cn
http://lIQ67QZf.prprz.cn
http://WtlEu4zg.prprz.cn
http://DHka0vnk.prprz.cn
http://Lkkk5pJr.prprz.cn
http://mbJzWYcl.prprz.cn
http://ICxHtvFY.prprz.cn
http://KZ1Mujxx.prprz.cn
http://www.dtcms.com/a/385968.html

相关文章:

  • Part03 数据结构
  • Java 设置 Excel 表格边框:一份详尽的 Spire.XLS 教程
  • Electron + Vue2 IPC 通讯实例
  • 【工具代码】使用Python截取视频片段,截取视频中的音频,截取音频片段
  • 《百日战纪:最终防卫学园》体验版在Steam平台推出!
  • 服务器 IPMI 实战:从 BMC 认知到 ipmitool 命令行运维
  • Cancer Cell最新空间组学研究|香港科技大学王吉光/天坛医院江涛院士团队合作提出IDH突变型星形细胞瘤的新分类标准
  • MissionPlanner架构梳理之(十四)日志浏览
  • 搭建论坛用什么服务器好?论坛服务器配置要求
  • 两台电脑如何共享“共享文件夹”
  • 【第五章:计算机视觉-项目实战之图像分类实战】1.经典卷积神经网络模型Backbone与图像-(7)细粒度分类理论
  • vscode实现第三方包的使用,cmake结合vcpkg(跨平台)
  • RabbitMQ 常见使用场景详解:从理论到实践
  • 【QT随笔】什么是Qt元对象系统?Qt元对象系统的核心机制与应用实践
  • 紧急供应链投毒预警 | NPM生态再次遭受盗号攻击引发新一轮开源供应链投毒
  • MySQL——10、视图和用户管理
  • 热点供应链投毒预警 | 知名NPM开发者遭受邮件钓鱼引发大规模供应链投毒攻击
  • 机器学习-NLP中的微调
  • uniapp+<script setup lang=“ts“>单个时间格式转换(format)
  • 第8篇、Kafka 监控与调优实战指南
  • R 语言查看类库源码的方法
  • 理解并发编程:自旋锁、互斥锁与读写锁的解析
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频内容理解与智能预警升级
  • 腾讯元宝 Java 中的 23 种设计模式(GoF 设计模式)
  • Excel:根据数据信息自动生成模板数据(多个Sheet)
  • hibernate和mybatis的差异,以及这种类似场景的优缺点和选择
  • 设计模式之:观察者模式
  • 【pycharm】ubuntu24.04 安装配置index-tts及webdemo快速上手
  • Java 设计模式——观察者模式:从 4 种写法到 SpringBoot 进阶
  • “光敏” 黑科技:杜绝手机二维码读取时的 NFC 误触