C++学习之函数模板

1.为什么要引入函数模板?

通过下图中三个函数可以看到除了数据类型不同以外,它们的运算逻辑是完全相同的,如果一一写出这三个函数意义不大,浪费时间,这个时候有没有一种方案:将类型作为参数传递进去,让计算机根据不同的参数,即不同的类型产生相应的函数,这样通过产生的三个函数就可以分别处理int float char 三个类型的数据了,并取得到相应类型的返回值,我们就省了好多代码。这就需要引入函数模板。

因此函数模板说白了就是函数的参数不固定成一种数据类型,可以根据函数的调用按需要传入任意类型的值


2.模板关键字

不管是类模板还是函数模板都会用到的三个关键字:template typename class

注意:其中typename和class的作用是相同的,用来指明数据类型T,这里的class不是类的意思,也是用来指明数据类型。

3.函数模板的形式

(1)用class关键字

如下图所示,函数模板的形式是:

使用template声明是一个模板,通过<class T>或者<typename T>来声明参数的类型。函数模板就相当于模具,根据模具产生的具体的函数(函数参数类型已固定)称为模板函数。

在计算机当中,如果我们仅仅写出了函数模板而不使用它,是不会产生任何代码数据的,因为它也不知道要产生什么样的代码数据。只有当我们去使用函数模板的时候,计算机才知道具体要实例化出怎样的一个模板函数来,这个时候才会产生真正的代码,才会参与逻辑的运行。

最后注意调用有两种形式:第一种直接传入整型的值,不显示指定模板参数的类型,那么系统会默认认为T的类型为int;第二种显示的指定模板参数的类型,指定方式是函数名<类型名称>(实参列表),如下图所示,注意一旦指定模板参数的类型,实参列表里面的数值必须是指定类型的,下图中必须是char型的,否则会报错。


(2)用typename关键字

注意交换数据的时候参数传递的是引用。


(3)变量作为模板的参数

给模板传入的不再是类型,而是一个变量,真正使用的时候传入的是一个常量,如下图所示


(4)多参数函数模板

注意多个参数之间用逗号隔开,且两个typename都不能省略。


注意:多参数函数模板,多个参数组合非常灵活:

1)typename和class关键字作用相同,在使用时时等价的,因此可以混用;


2)类型和变量也可以混用:


4.函数模板与函数重载的关系

同一个函数模板产生的所有的模板函数都是互为重载的,因为它们只有参数类型不同而已

而不同的函数模板产生的模板函数也有可能构成重载,如下所示:


这三个函数模板产生的模板函数互为重载:


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值