C++Template<>模版的介绍及深度解析

一、泛型编程

        1.什么是泛型编程

泛型编程:是一种程序设计方法,编写于类型无关的通用代码,实现代码复用。而模版就是泛型编程的基础和核心。

二、template<>模版

        1.template模版介绍

模版,顾名思义就是一个模具,人们只需要写一份代码,实现在多个类型上重复使用。不仅减少代码量,同时也增加了可维护性。模板的声明或定义只能在全局,命名空间或类范围内使用。不能在局部范围或函数内进行。

我们有两种模版:

1.函数模版          2.类模版

        2.template的定义

1.模版的分类:

类模版:

template<class 类型名,class 类型名,……>

class 类名{函数体};

函数模版:

template<class 类型名1,class 类型名2,……>

返回类型 函数名(类型名1 参数名,……)

{函数主体};

注意:typename也可以代替class,但是不能用struct代替class。

下面就是类模板和函数模板:

2.函数模版:

函数模版与类型无关,在使用时被参数化,根据传进来的类型,编译器自动匹配相应的模版。

这就是一个函数模版,函数根据传过来的数据(是同一个类型的数据),将其参数化为x和y,并执行相加输出。

2.2函数模版的原理

我们先看上面的函数模版:我们分别用int,double,char类型来调用。最后都能运行出结果。由此我们可以看出编译器在我们看不见的地方推演出三份函数,然后调用相应的函数来实现我们想要的结果。

2.3函数模版的实例化

我们之前这样调用函数,直接给出参数类型。然后由编译器自动识别类型,再传给形参的方式,我们叫做隐式实例化:

当我们在调用函数后面加上类型,就是告诉编译器我要传什么类型的数据,这种叫现式传参

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

上面隐式和显式的运行结果:

2.4函数模版的调用原则

如果我们写了一个函数模版,同时也写了一份实现函数,那编译器会调用谁呢?

通过调试我们发现,编译器会调用我们自己实现的那个函数。其实这就相当于对编译器来说有现成的,谁还去自己做。

3.类模板

3.1类模板的定义

其实和函数模版类似,只是类模板是对于类,函数模版只是对于一个函数。

3.1类模板的实例化

在类名后中的< >声明类型即可。

三、对于类模板的进一步的用法,在我的下一篇文章

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Though even

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值