第一部分 基础

函数模板

定义:

  • 函数模板是那些被参数化的函数,它们代表一个函数家族。该函数可以被多种不同的类型调用。
//example:
template <typename T> //typename:也可以使用class代替
inline T const& max(T const& a,T const& b)
{
    //寻找最大值
    return a<b?b:a;
}

重载函数模板

  • 重载:相同的函数名称可以具有不同的函数定义
    例如:
void display_num(int num);
void display_num(double num);
//  根据num的类型自动匹配最合适的函数
  • 重载函数模板
    例如:
//定义一个非函数模板函数,求两个int类型的最大值
inline int const& max(int const& a,int const& b)
{
    return a<b?b:a;
}

//函数模板函数,求两个任意类型的最大值
template <typename T>
inline T const& max(T const& a,T const& b)
{
    return a<b?b:a;
}

//求三个任意类型的最大值
template <typename T>
inline T const& max(T const& a.T const& b,T const& c)
{
    return ::max(::max(a,b),c);
}

int main()
{
    ::max(7,42,25);// 调用具有三个参数的模板
    ::max('a','k');//调用max<char>
    ::max(7,43); //未调用函数模板,调用的是int 重载的非模板函数
    ::max('a',22); //调用int重载的非模板函数
    return 0;
}
以上程序定义了一个函数模板T const& max和一个重载函数int const& max.当模板和重载冲突的时候 ,就优先调用重载

函数模板只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板,这就是函数模板相对于函数重载的缺陷。

类模板

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容