c++学习:函数模板+实战

发布时间:2024年01月04日

目录

函数模板

思考

如果两个参数的类型不一样可以下面这么写

如果有指定返回参数可以下面这么写

实战 找出三个数中最大的一个


函数模板

  • 实际上就是建立一个通用函数,其函数返回值类型和形参类型不具体指定,用一个虚拟的类型来代表
  • template 是一个关键字 ,表示下面定义的是一个模板
  • typename 也是一个关键字,后面跟的T是一个虚拟的数据类型,可以用class来代替
  • 其函数返回值数据类型 和 形参的数据类型 不具体指定,用一个虚拟的类型在代表

思考

void _swap(int &a,int &b)
{
    a = a+b;b=a-b;a=a-b;
}
void _swap(double &a,double &b)
{
    a = a+b;b=a-b;a=a-b;
}
void _swap(char &a,char &b)
{
    a = a+b;b=a-b;a=a-b;
}

不断重写swap函数,太过麻烦

我们可以建立一个通用板的函数

template<typename T>
void _swap(T &a,T &b)
{
    cout<<"template"<<endl;
    a = a+b;b=a-b;a=a-b;
}

int a = 10,b=20;
当_swap(a,b);调用后
会自动生成void _swap(int  &a,int  &b)

如果两个参数的类型不一样可以下面这么写

template<typename T,typename Tx>
void _swap(T &a,Tx &b)
{
    cout<<"template"<<endl;
    a = a+b;b=a-b;a=a-b;
}

如果有指定返回参数可以下面这么写

template<typename T=int>
T _max(T a,T b)
{
    T c;
    return a>b?a:b;
}

int a = 10,b=20;
_max<int>(a,b);---->int _max(int a,int b)

实战 找出三个数中最大的一个

template<typename T>
T _max(T a,T b,T c)
{
    return a>b ? (a>c?a:c) : (b>c?b:c);
}

cout<<max<int>(10,20,30)<<endl;

如果在类中实现

class Max
{
public:
    Max();
    template<typename T>
    T max(T a,T b,T c);
};

如果有max.cpp  max.h,那下面模板函数定义一定要放到.h里,上面的也可以放到.h里
template<typename T>
T Max::max(T a,T b,T c)
{
    return a>b ? (a>c?a:c) : (b>c?b:c);
}

调用方法如下
    Max mya;

    cout<<mya.max<int>(10,20,30)<<endl;

文章来源:https://blog.csdn.net/weixin_59669309/article/details/135375472
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。