函数模板

首先先说一下模板吧

template<class T>

T Min(T a,T b){}

其中T代表任意的数据类型,称为类属参数,先用函数模板来进行举例吧

#include<iostream>
using namespace std;
template<class T>
T Min(T a,T b)
{
    return (a>b)?b:a;
}
int main()
{
    double a=3.9,b=3.4;
    int c=5,d=3;
    cout<<"3.9与3.4最小值"<<Min(a,b)<<endl;
    cout<<"5与3的最小值"<<Min(c,d)<<endl;
    //cout<<"3.9与3的最小值"<<Min(a,d)<<endl;会发生编译错误。
    cout<<"字符a与b的最小值"<<Min('a','b')<<endl;
    return 0;

}

当你仅仅定义模板时,模板本身不能使编译器产生任何代码,因为编译器不知道你的函数模板到底要处理什么样的数据类型,在上例中当编译器遇到cout<<"3.9与3.4最小值"<<Min(a,b)<<endl;时才开始函数模板的实例化,因为这时可以告诉编译器我需要什么数据类型进行比较。

函数模板的定义:

template<class T1,class T2. . . . . >

返回类型 函数名 (参数表)

注意点

1,不要将类的声明关键字class与此处的class混淆,它们不一样,这里的class表示T类型是一种任意类型,当然你也可以写成template<typename T1,typename T2 . . . . .>以此来区分类的class。

2,不允许在template语句与函数模板定义之间有任何其它语句。

3,注意一下参数的匹配问题

如上例cout<<"3.9与3的最小值"<<Min(a,d)<<endl;会发生编译错误。因为这样会使编译器不知道要取int类型还是double类型

改法有三种

一,强制性类型转换cout<<"3.9与3的最小值"<<Min(a,(double)d)<<endl。

二,显式指定模板实例化的类型参数,这个是C++为用户提供的一种显式指定模板类型的方法,用法是:

cout<<"3.9与3的最小值"<<Min<double>(a,d)<<endl,即在函数名后加<参数实际类型>

三,指定多个模板参数,像下面代码所示

#include<iostream>
using namespace std;
template<class T1,class T2>
T1 Min(T1 a,T2 b)
{
    return (a>b)?b:a;
}
int main()
{
    double a=3.9;
    int b=3;
    cout<<"3.9与3的最小值"<<Min(a,b)<<endl;
    return 0;
}

要注意返回类型要是两者中精度高的那一个。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值