第一部分 基础

函数模板

定义:

  • 函数模板是那些被参数化的函数,它们代表一个函数家族。该函数可以被多种不同的类型调用。
//example:
template  //typename:也可以使用class代替
inline T const& max(T const& a,T const& b)
{
    //寻找最大值
    return 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
inline T const& max(T const& a,T const& b)
{
    return a
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
    ::max(7,43); //未调用函数模板,调用的是int 重载的非模板函数
    ::max('a',22); //调用int重载的非模板函数
    return 0;
}
以上程序定义了一个函数模板T const& max和一个重载函数int const& max.当模板和重载冲突的时候 ,就优先调用重载

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

类模板

你可能感兴趣的:(第一部分 基础)