C++的模板

一、什么是模板

因为有了模板,C++便开始了泛型编程,也就出现了伟大的STL库,STL通过使用模板就可以实例化出不同类型的容器,这也是C++强大的一个点;那所谓的泛型编程就是说,假设一个函数需要执行不同请款的任务的时候,只需要一份代码就可以了,这可以联想到函数重载,但是函数重载有个问题就是需要手写两份或者多份的代码,然后控制返回值,形参列表等区实现,这样就会比较麻烦;所以这时候就可以使用函数模板解决这个问题,模板实际也就是一个摸具,给不同的材料就出现不同的模型;那模板也是同理给不同的参数也就有了不同的类型。

二、 模板的用法

在模板的概念中也分为函数模板类模板

1、模板函数

函数模板的定义:

在这里插入图片描述
定义函数模板参数可以用typename、class、但是不可以用struct

函数模板的实例化:

隐式实例化:
(1)、函数模板的模板参数只有一个时只能对一种类型进行推导
在这里插入图片描述
如果要解决这个问题,可以把上述的2.00强转成(int)2.00,这样也是可以的

在这里插入图片描述
再者就是再定义一个模板参数
在这里插入图片描述
显示实例化:
在这里插入图片描述

函数模板的原理:

函数模板其实是一个函数家族,是通过实参推导出不同类型的函数。
在编译阶段,编译器会通过实参去推导出模板的类型,这些操作都是需要交给编译器即可
在这里插入图片描述

模板参数的匹配原则:

模板函数可以和一个非模板同名的函数同时存在,当实参非模板同名函数的形参的类型匹配的时候,编译器会优先调用非模板的同名函数,只有当传的实参是非模板函数形参不同是才会去利用模板去创建一个函数。
在这里插入图片描述

2、模板类

模板类的定义

在这里插入图片描述
类模板的是通过模板参数,对成员变量或成员函数的返回值,形参确定类型的。
如果类中的成员函数是在类中声明,类外定义的,需要把模板都一起带上
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/31db7120aade4a93854f031d49aaeb76.png
切记:
1、最后确定返回值;还要带上模板template< class T >
2、先把函数在哪个类作用域写清楚(在确定类作用域的时候需要带上模板参数)
3、再和类中的声明先对应返回值,

类模板的实例化

在类模板的实例化中和函数模板有着很大的不同,因为在类模板中类名不再是类了,类名+<类型>才是类
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值