C++11回顾学习(6): 模板类-Template简介

模板类初学。

所谓函数模板,实际上是建立一个通用函数,它所用到的数据类型(包括返回值类型、形参类型、局部变量类型)可以不具体指定.

而是用一个虚拟的类型来代替(实际上是用一个标识符来占位),等发生函数调用时再根据传入的实参来逆推出真正的类型。这个通用函数就称为函数模板(Function Template)。

在函数模板中,数据的值(Value)和类型(Type)都被参数化了,发生函数调用时编译器会根据传入的实参推演形参的值和类型.

也就是说,函数模板除了支持值的参数化,还支持类型的参数化。

1. 看一个对比案例

  • 在未学习模板类之前,我们使用函数重载来实现不同类型的参数
    //交换 int 变量的值
    void Swap(int *a, int *b){
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    //交换 float 变量的值
    void Swap(float *a, float *b){
        float temp = *a;
        *a = *b;
        *b = temp;
    }
    //交换 char 变量的值
    void Swap(char *a, char *b){
        char temp = *a;
        *a = *b;
        *b = temp;
    }
    //交换 bool 变量的值
    void Swap(bool *a, bool *b){
        char temp = *a;
        *a = *b;
        *b = temp;
    }

  • 在学习模板类之后,我们用模板来定义功能相同、函数体相同、只有数据类型不同的函数
    #include <iostream>
    using namespace std;
    template<typename T> void Swap(T *a, T *b){
        T temp = *a;
        *a = *b;
        *b = temp;
    }
    int main(){
        //交换 int 变量的值
        int n1 = 100, n2 = 200;
        Swap(&n1, &n2);
        cout<<n1<<", "<<n2<<endl;
       
        //交换 float 变量的值
        float f1 = 12.5, f2 = 56.93;
        Swap(&f1, &f2);
        cout<<f1<<", "<<f2<<endl;
       
        //交换 char 变量的值
        char c1 = 'A', c2 = 'B';
        Swap(&c1, &c2);
        cout<<c1<<", "<<c2<<endl;
       
        //交换 bool 变量的值
        bool b1 = false, b2 = true;
        Swap(&b1, &b2);
        cout<<b1<<", "<<b2<<endl;
        return 0;
    }

2.使用模板的几个关键字

关注定义的函数模板

1.template是定义函数模板的关键字,它后面紧跟尖括号<>.

2.尖括号包围的是类型参数(也可以说是虚拟的类型,或者说是类型占位符).

3.typename(class)是另外一个关键字,用来声明具体的类型参数,这里的类型参数就是T.

4.从整体上看,template<typename T>被称为模板头.

定义了函数模板后,就可以像调用普通函数一样来调用它们了.

最后,函数模板也可以提前声明,不过声明时需要带上模板头,并且模板头和函数定义(声明)是一个不可分割的整体,它们可以换行,但中间不能有分号。

参考连接: c.biancheng.net/view/2317.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱发呆de白菜头

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

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

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

打赏作者

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

抵扣说明:

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

余额充值