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

深入探讨模板初阶:函数模板与类模板

@Shadow

国服女程序员在线敲代码
撒谎姓倒过来写 !
长期连载每周三到四更
点个关注球球了
🎶Ciallo~😎

目录

泛型编程技术

1.函数模板

1.1函数模板的格式

1.2函数模板的原理

1.3函数模板的实例化

1.3.1隐式实例化

1.3.2显示实例化

1.3.3强转类型转换

1.4模板参数的匹配原则

2.类模板

2.1类模板的定义示例

2.2类模板的实例化:


泛型编程技术

前言:针对于参数与类型高效替代技术。

使用对象:

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.函数模板

概念:函数模板并不是函数而是代表了一个函数家族,该函数模板与类型无关,在使用时被参数化(虚拟类型参数->实际类型参数),根据实参的类型产生相应类型版本。

※1.1函数模板的格式

template<typename T1, typename T2, ……> 注意:末尾无" ; "!! 或者 template<class T1, class T2, ……> 注意:class与typename都可以但struct不可以 (语法规定)

1.2函数模板的原理

函数模板是一个蓝图,它本身并不是函数,是编译器使用方式产生特定具体类型的模具。
所以其实模板就是将我们本来一个做的重复的事情交给编译器

在编译阶段,对于模板的所以编译器需要根据传入的实参类型来推演实参对应类型的函数以供调用。比如:当doouble类型使用函数模板时,编译器通过推演实参数化确定为double类型,然后产生一份专门用于处理double类型的代码。

1.3函数模板的实例化

在不同类型的参数使用函数模板时,称为函数模板的实例化。函数模板的实例化又分为:显示实例化与隐式实例化

1.3.1隐式实例化

让编译器根据传入的参数类型推演模板的类型取什么。

template<typename T1, typename T2> T1 Add(const T1& a, const T2& b) { return a + b; } int main() { int a1 = 10, a2 = 20; double d1 = 10.0, d2 = 20.0; Add(a1, a2); //在此处就确定了模板的类型 Add(d1, d2); //报错 return 0; }

1.3.2显示实例化

构成:"函数名"+"<指定的类型名>"+"(传入的参数)"

可依次指定多个类型,之间以" , "隔开。

int main(void) { int a = 10; int b = 20; // 显式实例化 Add<int>(a, b); return 0; }

1.3.3强转类型转换

int main(void) { int a = 10; double b = 20.5; // 显式实例化 Add(a, (int)b); return 0; }

如果类型不匹配,编译器会尝试进行隐式类型转换,若转换不成功,编译器报错

1.4模板参数的匹配原则

1.一个模板函数可以和一个同名的函数同时存在,而且该函数模板还可以被实例化为这个非函数模板函数。

2.对于非模板函数和同名函数,如果其他条件相同(特指函参),在调用时会优先调用非模板函数而不是同名函数。

3.如果模板函数可以产生一个更加合适的函数那么调用此函数数。(通常适用于函参的多样类型)。

※3.模板函数不允许自动类型转换。如下:

template<typename T> T max(T a, T b) { return (a > b) ? a : b; } int main() { int i = 10; double d = 20.5; ******************************************* // ❌ 编译错误!无法推导T // max(i, d); // 矛盾:T应该是int还是double? ******************************************* // ✅ 必须显式指定或保持类型一致 max<double>(i, d); // 显式指定T=double,i自动转为double max<int>(i, d); // 显式指定T=int,d自动转为int max(i, 5); // 同类型,推导为int return 0; }

2.类模板

前情回顾:十分值得注意的是:每个模板,前置于函数/类前声明后作用于此函数/类。越过此函数/类该函数模板失效

因此:如果在实现类内声明类外初始化一定要在每个初始化函数前加上模板

2.1类模板的定义示例

template<typename T> //使用class类将Stack寓于其中 class Stack { public: //void InitStack() Stack(size_t capacity = 4) { _array = new T[capacity](); _capacity = capacity; _size = 0; } /*Stack(size_t capacity = 4) :_array = new T[4]() ,_capacity(capacity) , { }*/ private: T* _array; size_t _capacity; size_t _size; };

2.2类模板的实例化:

※类模板的实例化与函数的实例化不同,类模板的实例化必须在类模板的名称后加显示类型转换。

int main() { //现在要使用一个类名为Stack的类来定义两个栈 Stack<int> st1; //存储int类型的栈 Stack<double> st2; //存储double类型数据的栈 return 0; }
http://www.jsqmd.com/news/466082/

相关文章:

  • 劳力士、欧米茄、积家专属指南:北京上海深圳杭州南京无锡腕表保值养护哪里好 - 时光修表匠
  • 【开题答辩全过程】以 高校新生数据可视化系统为例,包含答辩的问题和答案
  • 抓包工具——UI接口测试——fiddler
  • 拒绝 500 元智商税!AutoClaw 零门槛安装教程,手把手教你低成本“喂龙虾”
  • PAT-Rational Arithmetic (20)
  • SpringBoot 多环境配置报错全集|profile切换失败、配置不生效终极解决
  • 超节点算力革命(七)| 超节点综合评估体系
  • 数挖不是树蛙-数据挖掘-绪论(非科班必备,数据挖掘科班复习必备)
  • 基于 Java + SpringBoot + Vue + MySQL 的北部湾地区助农系统实战指南
  • @Autowired`和 @Resource区别
  • 商汤小浣熊为OpenClaw注入新技能:软硬一体安全部署,养出精通Excel的龙虾!
  • 2026最强小尺寸安卓平板来了?联想拯救者Y700第五代曝光
  • 破解青少年近视困扰,铭远光学益趣控PRO带来高效防控新选择
  • 2026年比较好的油烟机清洗厂家推荐:商用油烟机清洗/工厂油烟机清洗/餐饮店油烟机清洗厂家推荐及选购指南 - 行业平台推荐
  • 02计算机组成原理-存储器技术(上)
  • 探秘温州新石器无人车:未来出行体验,销售中心实地体验分享
  • 富文本编辑器模板1
  • 墨盒买哪家好?格之格提醒你一定要选靠谱大品牌 - yangyuan-shunfeng
  • Spring的Bean是线程安全的吗
  • Spring Bean 生命周期
  • 疑似口服美容假洋牌真相调查:国内最火8个口服美容品牌深度解析 - 资讯焦点
  • 计算机毕业设计源码:基于python与Flask的京东手机数据分析系统 pyecharts requests爬虫 电子产品 电商 商品 推荐系统 数据分析 可视化 大数据 大模型(建议收藏)✅
  • 注塑机数据采集如何实现与 MES 系统的双向数据闭环?
  • IACheck AI报告文档审核为新能源汽车高压安全检测报告审核提供支撑
  • 格之格硒鼓怎么样?品质硬核、选购省心,办公耗材优选之选(1) - yangyuan-shunfeng
  • 2026年硒鼓耐用品牌推荐:格之格为何成为大众的首选品牌?(1) - yangyuan-shunfeng
  • 数组随课笔记
  • Python变量作用域和相关的关键字
  • 买硒鼓买什么牌子好?格之格易加粉2 - yangyuan-shunfeng
  • 2026南通全屋定制小红书运营服务商推荐:抖音视频拍摄/抖音陪跑/新媒体运营/短视频培训/企业IP打造培训课程/选择指南 - 优质品牌商家