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

🌈 个人主页:白子寰

🔥 分类专栏:C++打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~

💡 坚持创作博文(平均质量分82+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)

目录

泛型编程

函数模板

函数模板概念

函数模板格式

函数模板的原理

函数模板的实例化

隐式实例化

显式实例化

模板参数的匹配原则

类模板

类模板的定义格式

类模板的实例化


泛型编程

我们之前写swap(交换两个变量) ,不同类型的是不是得重复写一个函数名相同、参数不同的函数 【函数重载】

可是像这种泛型编程,有两种弊端

①代码复用率低

②代码维护性低

那有没有只写一个函数就能解决不同参数实现函数swap(交换)呢?




函数模板

函数模板概念

函数模板是一种代码复用机制,它允许编写与数据类型无关的函数定义,使得同一个函数可以处理多种不同类型的参数

简而言之,函数模板提供了类型参数化的能力


函数模板格式

一般推荐使用关键词class

在主函数中,两个函数名一样,调用这两个函数的地址相同吗?

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


函数模板的原理


函数模板的实例化

隐式实例化

当函数模板被调用时,编译器会根据传递给模板的参数类型自动生成函数的特定版本。

这个过程称为隐式实例化。

编译器会在需要的时候自动创建一个特定类型的函数版本


显式实例化

显式实例化是指程序员明确告诉编译器为特定的类型创建模板函数的实例。

显式实例化通常用于模板代码的分离编译,或者当编译器无法自动推导模板参数时

接上面代码,我想把变量b转换为double怎么转?

有两种方式


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


模板参数的匹配原则

当一个非模板函数与一个函数模板具有相同的名字和相同的调用形式时,非模板函数将优先于模板函数被调用。

如果需要调用模板函数 ,则可以通过显式实例化来实现。
模板实例化与非模板函数 可以构成重载关系




类模板

类模板的定义格式

cpp 复制代码
template <typename T>
class ClassName {
    // 类成员声明
public:
    ClassName() { /* 构造函数代码 */ }
    ~ClassName() { /* 析构函数代码 */ }
    // 其他成员函数和数据成员
    void memberFunction(T param) {
        // 使用类型T的函数实现
    }
    
    T dataMember; // 使用类型T的数据成员

    // ...
};

那支持多个参数不同的类型该怎么定义?

cpp 复制代码
template <typename T1, typename T2, ...>
class ClassName {
    // 类成员声明
public:
    // ...
};

类模板的实例化

解释:

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




***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。

等等等等一下,分享最近喜欢的一句话:

"以结果为导向,主动去争取"。

我是白子寰 ,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。

你的点赞和关注是我持续写作的动力!!!

好了划走吧。

相关推荐
ShineWinsu18 分钟前
对于数据结构:堆的超详细保姆级解析—上
数据结构·c++·算法·计算机·二叉树·顺序表·
im_AMBER41 分钟前
Leetcode 46
c语言·c++·笔记·学习·算法·leetcode
民乐团扒谱机44 分钟前
脉冲在克尔效应下的频谱展宽仿真:原理与 MATLAB 实现
开发语言·matlab·光电·非线性光学·克尔效应
yuan199971 小时前
基于扩展卡尔曼滤波的电池荷电状态估算的MATLAB实现
开发语言·matlab
Tony Bai1 小时前
Go GUI 开发的“绝境”与“破局”:2025 年现状与展望
开发语言·后端·golang
豆浆whisky1 小时前
Go分布式追踪实战:从理论到OpenTelemetry集成|Go语言进阶(15)
开发语言·分布式·golang
2401_860494701 小时前
Rust语言高级技巧 - RefCell 是另外一个提供了内部可变性的类型,Cell 类型没办法制造出直接指向内部数据的指针,为什么RefCell可以呢?
开发语言·rust·制造
Tony Bai1 小时前
【Go模块构建与依赖管理】08 深入 Go Module Proxy 协议
开发语言·后端·golang
浪裡遊1 小时前
Next.js路由系统
开发语言·前端·javascript·react.js·node.js·js
程序员-小李1 小时前
基于 Python + OpenCV 的人脸识别系统开发实战
开发语言·python·opencv