函数模板

如果需要一个用于交换两个int值的函数,我们可以这样定义:

void Swap(int a, int b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}
void Swap(int a, int b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

但是现在如果需要交换的值不是int型,而是double型,又得重新重载一下Swap函数:

double
void Swap(double a, double b)
{
    double temp;
    temp = a;
    a = b;
    b = temp;
}

如果又有要交换值的地方,并且值的类型是char,又得重新重载一下Swap函数,这样下去是很繁琐的,所以C++提出了一种解决办法:函数模板.

1、函数模板的定义

函数模板允许以任意类型的方式来定义函数,例如:

temp = a;
    a = b;
    b = temp;
template <typename AnyType>
void Swap(AnyType &a, AnyType &b)
{
    AnyType temp;
    temp = a;
    a = b;
    b = temp;
}

//注意:在标准C++98添加关键字typename之前,C++使用关键字class来创建模板
template <class T>
void Swap(T &a, T &b)
{
    T temp;
    temp = a;
    a = b;
    b = temp;
}

2、函数模板的使用

#include<iostream>
int main()
{
    using namespace std;
    int i = 10;
    int j = 20;
    //generates void Swap(int &, int &)
    Swap(i,j); 
    
    double i = 24.5;
    double j = 81.7;
    //generates void Swap(double &, double &)
    Swap(i,j);   
}

注意:函数模板不能缩短可执行程序,最终的代码不包含任何模板,仍将是由两个独立的函数定义,就像以手工方式定义这些函数一样,但是使用模板可以使得生成多个函数定义更简单、更可靠。

3、重载的模板

需要对多个不同类型使用同一算法的函数时,可使用模板。但是并非所有的类型都使用相同的算法,为了满足这种需求,可以向重载常规函数定义那样重载模板定义,例如:

#include<iostream>
​
template <typename T>
void Swap(T &a, T &b)
{
   T temp;
   temp = a;
   a = b;
   b = temp;  
}
​
template <typename T>
void Swap(T *a, T *b, int n)
{
    T temp;
    for(int i = 0; i<n; i++)
    {
        temp = a[i];
        a[i] = b[i];
        b[i] = temp;
    }
}
​
​
int main()
{
    using namespace std;
    int i = 10;
    int j = 20;
    //generates void Swap(int &, int &)
    Swap(i,j); 
    
    int len = 5;
    int d1[len] = {1,2,3,4,5};
    int d2[len] = {10,9,8,7,6};
    Swap(d1,d2,len);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贝勒里恩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值