模板函数

#include <iostream>

using namespace std;
/*
把数据的类型也当做参数传入,减少代码重用,使代码不受类型的限制
*/
int maax(int a,int b)
{
    return a>b?a:b;
}
double maax(double a,double b)
{
    return a>b?a:b;
}
float maax(float a,float b)
{
    return a>b?a:b;
}
//求两者的最大值,只有传入的类型不同,内部的算法都一样(代码冗余),就可以模板函数
template<typename type1>//定义一个类型"变量",可以表示一个类型
type1 maax(type1 a,type1 b)//这里计算机自己会通过你出入的参数进行推演,(参数是什么类型type1就被赋为上么类型)
{
    cout<<"ads"<<endl;
    return a>b?a:b;
}
/*
函数模的效率不高,函数模板在调用的时候会自动生成具体的对应类型的函数模板再进行执行.(即上面的几个类型的函数,但好处就是减少代码重用).
*/
template<typename type1,typename type2>
type1 maax(type1 a,type2 b)
{
    return a>b?a:b;
}
int main()
{
    maax('a','b');
    maax(1,2);
    maax(1.2,3.4);
    maax(1.2f,3.4f);//小数默认转化为 double,除非在后面加上 f 限定.

    /*
    maax(2,2.1);
    如果只有一个int型的函数,那么程序就会把小数默认转化为int型进行int maax(int ,int );函数;
    但是对于type1 maax(type1 a,type1 b)模板函数
    传入的两个参数的类型赋给type1
    这时两个type1不一样一个 int 一个 double(模板不会强制转换)
    于是计算机就不能进行正常推演type1的类型;
    那该怎么办呢?
    */
    maax(2,(int)2.1);//他不会默认转化那我们就给他强制;
    maax((double)1,2.1);//或者强转为double;
    maax<int>(2,2.1);//这是一个新操作,用一个尖括号我们主动地把typ1的类型传入为int类型.这时模板函数就不需要自己自动推演type1了.
    maax(2,2.1);//最后一个模板函数,一个type1 不够那我就在弄一个"类型变量",.两个一个推演为int,一个推演为double.

//    maax(test a,test b);//这还是调用模板函数,type1会赋为test类型.编译出错是因为没有对 > 进行重载,重载一下这个符号就好了.
    cout << "Hello world!" << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值