专业编程基础技术教程

网站首页 > 基础教程 正文

C++|重载函数模板(c++中重载函数)

ccvgpt 2024-08-03 12:32:07 基础教程 12 ℃

模板实现了数据类型的泛化,但模板类型并不能提供类型的隐式转换:

T max(T a,T b)
{ 
    return  a > b ? a : b ; 
}
void  f ( int  i , char  c )
{  
    max ( i , i ) ;      // ok
    max ( c ,  c ) ;    // ok
    max ( i ,  c ) ;    // error,无法匹配
    max ( c ,  i ) ;    // error
}

函数模板也可以重载:

C++|重载函数模板(c++中重载函数)

#include <iostream>
using namespace std;

template <typename T>                     // 函数模板
T max(T a,T b)
{ 
    return  a > b ? a : b ; 
}

int Max( const int a , const char b )     // 用普通函数重载函数模板
{ 
    return a>b ? a : b ; 
}

template <typename T>                      // 重载函数模板
T Max( const T a, const T b , const T c)
{ 
    T t = Max(a, b) ;    
    return Max ( t, c ) ;  
}

int main ( )
{ 
    cout << " Max( 3, 'a' ) is " << Max( 3, 'a' ) << endl ;       // 由系统提供隐式转换
    cout << " Max(9.3, 0.5) is " << Max(9.3, 0.5) << endl ;   // 编译器匹配函数模板T max(T a,T b)
    cout << " Max(9, 5, 23) is " << Max(9, 5, 23) << endl ;   // 编译器匹配函数模板T Max( const T a, const T b , const T c)
    getchar();
}

/*
 Max( 3, 'a' ) is 97
 Max(9.3, 0.5) is 9
 Max(9, 5, 23) is 23
*/

特定情况下,泛化的类型并不能适应特定的数据类型,所以还需要实现特定类型的特化。

-End-

Tags:

最近发表
标签列表