C++模板初阶

目录

1 泛型编程

2 函数模板

3 类模板


泛型编程

        什么是泛型编程?泛型编程相当与一个函数家族,不关乎类型,通过参数的不同类型可以在编译阶段推演出相应的程序。同时还有一个问题,既然我们有函数重载,那么为什么还需要泛型编程。 

int add(int a,int b)
{
    return a+b;
}


int add(double  a,double b)//此时我们用的是函数的重载
{
    return a+b;
}


template <class T>//这里用的是泛型编程
T add(T a,T b)
{
    return a+b;
}

 从上面的程序可以看出,使用函数重载是可以实现各种不同类型的函数,但可以看出,如果出现新的类型,又要重新写,所以复用率不高。

函数模板

函数模板是一个函数家族,通过类型不同可以由编译器编译出不同的函数。

函数模板的格式

template<class T>

T add(T a,T b)
{
    return a+b;
}

函数模板的原理

通过编译器的推演,根据不同的参数类型,实例化出不同的函数

函数模板的实例化

隐式类型转换:就正常按函数模板转换

显示类型转换:显示的转换

template<class T c>
add<int> (a,b)//转化Int

函数匹配的三点原则

1 一个非模板函数可以和一个同名的模板函数同时存在,而且这个函数模板可以实例化出这个非模板函数。

2,如果非模板函数更适合,就直接用非模板函数。

template<class T>// 模板函数
T Add(T a,T b)
{
    return a+b;
}


double Add(int a,double b)//非模板函数
{
    return a+b;
}

int main()
{
    a=1;
    b=2;
    c=1.2;
    Add(a,b);//此时模板函数
    Add(a,c);//用非模板函数

3 非模板函数不能进行隐士类型转换,而普通的函数可以

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值