详解C++函数模板

函数模板属于类属,能够处理不同的数据类型,当编译器遇到函数调用是,将根据实际参数的类型产生特定的代码,函数模板的定义形式是:

template <类型参数表>
返回值类型 函数名(形式参数表){
//函数体
}

函数模板可以为我们提供很多方便

函数重载的例子:
int square(int number){
    return number*number;
}

float square(float number){
    return number*number;
}

上述两个函数之间的区别是参数类型和返回值类型不一样,这种情况下我们使用函数模板更加方便。
通过函数模板实现square函数

template <class T>
T square(T number){
    return number*number;
}

只要写一个函数定义就可以处理不同的数据类型,而不需要对每种数据类型都写一个单独的函数。
eg1:

#include<iostream>
using namespace std;

template <class T>
T square(T number){
    return number*number;
} 

int main(){
    int userInt;
    float userFloat;

    cout.precision(5);
    cout<<"请输入一个整数和一个浮点数:";
    cin>>userInt>>userFloat;
    cout<<"他们的平方分别是:";
    cout<<square(userInt)<<"和"<<square(userFloat)<<endl;
    return 0; 
}

注:①函数模板本身不占用内存,当编译器遇到函数调用是,将在内存中创建一个函数实例。②模板的定义必须放在函数调用之前,通常放在程序的开头或者位于头文件中。

具有多个参数的函数模板:

template <class T>
void swapData(T &var1,T &var2){
    T temp;
    temp=var1;
    var1=var2;
    var2=temp;
}

函数模板不是一个真正意义上的函数,它仅仅是一个函数模型,当编译器遇到函数调用是,将依据模板给出的代码,通过检验参数的数据类型,产生重载函数。

具有多种类型的函数模板

template <class T1,class T2>
void swapData(T1 &var1,T2 &var2){
    T1 temp;
    temp=var1;
    var1=var2;
    var2=temp;
}

函数模板也支持重载

template <class T>
T sum(T var1,T var2){
    return var1+var2;
}

template <class T>
T sum(T var1,T var2,T var3){
    return var1+var2+var3;
}

当程序中有一个普通的函数(非模板),同时定义了一个模板,只要他们的参数列表不同,他们也能作为重载函数的形式共存。

float sum(float var1,float var2){
    return var1+var2;
}

template <class T>
T sum(T var1,T var2,T var3){
    return var1+var2+var3;
}
这也属于模板重载,当程序执行是,将根据实际调用的参数进行区分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值