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

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

🌈 个人主页:白子寰
🔥 分类专栏: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.lryc.cn/news/455818.html

相关文章:

  • 实战OpenCV之模板匹配
  • 【C++ 11】for 基于范围的循环
  • 创建索引时需要考虑的关键问题详解
  • 【JavaEE】【多线程】Thread类讲解
  • 硬件面试(一)
  • 9-贪心算法
  • 前端编程艺术(3)---JavaScript
  • 动态规划算法题目练习——91.解码方法
  • 每天一个数据分析题(四百九十二)- 主成分分析与因子分析
  • Linux shell编程学习笔记86:sensors命令——硬件体温计
  • 基于SSM车位租赁系统【附源码】
  • JAVA开源项目 新生报到网站 计算机毕业设计
  • QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题
  • 修改银河麒麟操作系统V10(SP1)网卡名称为ethx
  • MySQL多表查询:标量子查询
  • C++学习笔记----8、掌握类与对象(六)---- 操作符重载(1)
  • Ascend C 自定义算子开发:高效的算子实现
  • 面向对象技术——设计模式
  • 2024 Mysql基础与进阶操作系列之MySQL触发器详解(20)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
  • 找不到concrt140.dll如何修复,快来试试这6种解决方法
  • 年会工作会议会务报名签到小程序开源版开发
  • UE C++ 实时加载模型的总结
  • 实施威胁暴露管理、降低网络风险暴露的最佳实践
  • 51.哀家要长脑子了!
  • Overleaf 无法显示图片
  • 如何实现 C/C++ 与 Python 的通信?
  • 音视频入门基础:FLV专题(13)——FFmpeg源码中,解析任意Type值的SCRIPTDATAVALUE类型的实现
  • jvm里的metaspace oom 排查问题思路-使用MAT
  • 2025舜宇招聘【内推码】
  • APP自动化搭建与应用