(2)用非模板函数重载函数模板,这种重载有两种表述方式:10 ①只声明一个非模板函数的原型,而不给出函数体,它的函数体是 借用函数模板的函数体。当执行此重载版本时会自动调用函数模 板的函数体。 template<class T> T max(TX,Ty i return(x>y)? X y; 3 int max(int,int;「非模板函数的原型 void fun(int i, char c) i max i, i) ∥确,调用max(int;int) max(cc);∥正确,调用max(char;char max(i,c);∥正确,调用max( nt. int),它支持数据间的隐式转换 max(c,);∥正确,调用 max(int, int),它支持数据间的隐式转换 ②定义一个完整的非模板函数,此方法定义的重载函数,所带参数 的类型可以随意,就像一般的重载函数一样定义。例如 char *max( char *X, chen y) i return(strcmp(x,y>0)?x: yi)]
⑵用非模板函数重载函数模板,这种重载有两种表述方式: ①只声明一个非模板函数的原型,而不给出函数体,它的函数体是 借用函数模板的函数体。当执行此重载版本时会自动调用函数模 板的函数体。 template<class T> T max(T x,T y) { return(x>y)? x:y; } int max (int,int); //非模板函数的原型 void fun(int i,char c) { max(i,i); //正确,调用max(int,int) max(c,c); //正确,调用max(char,char) max(i,c); //正确,调用max(int,int),它支持数据间的隐式转换 max(c,i); //正确,调用max(int,int),它支持数据间的隐式转换 } ②定义一个完整的非模板函数,此方法定义的重载函数,所带参数 的类型可以随意,就像一般的重载函数一样定义。例如: char *max( char *x, chen *y) { return(strcmp(x,y>0)?x:y;) } 10
当出现调用语句max(“abcd”,”efgh”);时,执行的是这个重载的打 模板函数。 在c+中函数模板与同名的非模板函数重载时,调用的顺序遵 循下述约定 (1)寻找一个参数完全匹配的函数,如果找到了就调用它。 (2)寻找一个函数模板,将其实例化,产生一个匹配的模板函数,若 找到了,就调用它。 (3)若(1)和(2)都失败,再试一试低一级的对函数的重载方法,若找到 了,就调用它
当出现调用语句 max(“abcd” , ”efgh”);时,执行的是这个重载的非 模板函数。 在c++中函数模板与同名的非模板函数重载时,调用的顺序遵 循下述约定 ⑴寻找一个参数完全匹配的函数,如果找到了就调用它。 ⑵寻找一个函数模板,将其实例化,产生一个匹配的模板函数,若 找到了,就调用它。 ⑶若⑴和⑵都失败,再试一试低一级的对函数的重载方法,若找到 了,就调用它。 11