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

[复制链接]
发表于 2026-1-14 12:38:09 | 显示全部楼层 |阅读模式
🌈 个人主页:白子寰
🔥 分类专栏:C++打怪之路,python从入门到夺目,数据布局,C语言,C语言题集👈 渴望得到您的订阅和支持~
💡 对峙创作博文(匀称质量分82+),分享更多关于深度学习、C/C++,python范畴的优质内容!(渴望得到您的关注~)
  

目次
泛型编程
函数模板
函数模板概念
函数模板格式
函数模板的原理
函数模板的实例化
隐式实例化
显式实例化
模板参数的匹配原则
类模板
类模板的界说格式
类模板的实例化


泛型编程

我们之前写swap(交换两个变量),差异范例的是不是得重复写一个函数名雷同、参数差异的函数【函数重载】

但是像这种泛型编程,有两种弊端
代码复用率低
代码维护性低
那有没有只写一个函数就能办理差异参数实现函数swap(交换)呢?



函数模板

函数模板概念

   函数模板是一种代码复用机制,它允许编写与数据范例无关的函数界说,使得同一个函数可以处置惩罚多种差异范例的参数
  简而言之,函数模板提供了范例参数化的本领
  
函数模板格式


一样平常保举利用关键词class 
 在主函数中,两个函数名一样,调用这两个函数的地点雷同吗?
 

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

函数模板的原理



函数模板的实例化

隐式实例化

   当函数模板被调用时,编译器会根据转达给模板的参数范例自动天生函数的特定版本
  这个过程称为隐式实例化。
  编译器会在必要的时间自动创建一个特定范例的函数版本
  


显式实例化

   显式实例化是指步调员明确告诉编译器为特定的范例创建模板函数的实例。
  显式实例化通常用于模板代码的分离编译,大概当编译器无法自动推导模板参数时
  接上面代码,我想把变量b转换为double怎么转?
有两种方式


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


模板参数的匹配原则

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




类模板

类模板的界说格式

  1. template <typename T>
  2. class ClassName {
  3.     // 类成员声明
  4. public:
  5.     ClassName() { /* 构造函数代码 */ }
  6.     ~ClassName() { /* 析构函数代码 */ }
  7.     // 其他成员函数和数据成员
  8.     void memberFunction(T param) {
  9.         // 使用类型T的函数实现
  10.     }
  11.    
  12.     T dataMember; // 使用类型T的数据成员
  13.     // ...
  14. };
复制代码
那支持多个参数差异的范例该怎么界说? 
  1. template <typename T1, typename T2, ...>
  2. class ClassName {
  3.     // 类成员声明
  4. public:
  5.     // ...
  6. };
复制代码

类模板的实例化


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



  ***********************************************************分割线*****************************************************************************
完结!!!
感谢欣赏和阅读。

等等等等一下,分享近来喜欢的一句话:
  “以效果为导向,自动去夺取”。
  我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我连续写作的动力!!! 
好了划走吧。
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表