04.C++模板笔记

1、模板

①与具体类型无关的代码:泛型编程

②模板的使用格式:

一个类型:template<typename T> 或者template<class T>

多个类型:template<typename T1,typename T2>或者template<class T1,class T2>

然后下面跟一个以T为类型的函数,如:

复制代码
void Swap(T& left,T& right)
{
    T temp=left;
    left=right;
    right=temp;
}

③推演实例化:

1°模板的推演:根据实参推出T的类型的过程

2°模板的实例化:根据推出的T的类型生成对应的重载函数

🔺根据函数模板调用函数时,编译器会生成对应的重载函数。(也就是说传的参数类型不同调用的函数不是同一个)

🔺不能对同一个模板参数同时推成两个类型!!!!

④显式实例化:

1°使用格式:函数名<类型>(参数列表)

2°使用场景:传递的参数和模板类型无关或者无参,推不出模板类型。此时只能使用显式实例化。

⑤很多函数模板可以自己推也可以显式实例化,但是有些函数模板和类模板都是需要显式实例化的。

⑥普通函数和函数模板是可以同时存在的

1°如果我们自己实现了某个函数,同时也有这个函数的模板,那么我们调用时会调用我们写好的那个函数(我们调用的那个函数和我们写好的那个函数的参数类型是一样的)。

2°有更合适的就调用更合适的,哪怕重新生成一个,没有更合适的会进行隐式类型转换调用一个,前提是隐式类型转换不会产生歧义报错。

⑦类模板

1°使用类模板只能显式实例化

2°普通类:类名->类型

类模板实例化的类:类名不是类型,类名<数据类型>才是整个类的类型

▲显示实例化的类型不同,它们就是不同的类。

▲构造函数的函数名与类名相同,不是与类型相同,注意区分!!!!

▲声明和定义分离的时候前面要指定类型!并且上一行也要加上template<class T>!不用也要加上。而且!!类模板的声明和定义必须放在一个文件里面,放在两个文件里面会链接错误。

相关推荐
许长安7 小时前
RPC 同步调用基本使用方法:基于官方 RouteGuide 示例
c++·经验分享·笔记·rpc
kyriewen117 小时前
WebAssembly:前端界的“外挂”,让C++代码在浏览器里跑起来
开发语言·前端·javascript·c++·单元测试·ecmascript
浅念-10 小时前
刷穿LeetCode:BFS 解决 Flood Fill 算法
数据结构·c++·算法·leetcode·职场和发展·bfs·宽度优先
做cv的小昊11 小时前
【TJU】研究生应用统计学课程笔记(8)——第四章 线性模型(4.1 一元线性回归分析)
笔记·线性代数·算法·数学建模·回归·线性回归·概率论
楼田莉子12 小时前
Linux网络:NAT_代理
linux·运维·服务器·开发语言·c++·后端
我命由我1234512 小时前
程序员的心理学学习笔记 - 空杯心态
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
南境十里·墨染春水12 小时前
C++日志 2——实现单线程日志系统
java·jvm·c++
zh_xuan12 小时前
api测试工具添加历史记录功能
c++·libcurl·duilib
晓梦林12 小时前
3170靶场学习笔记
笔记·学习
ZC跨境爬虫12 小时前
跟着 MDN 学 HTML day_17:媒体与 Web Audio API 自动播放指南——策略、检测与最佳实践
前端·笔记·ui·html·音视频·媒体