当前位置:网站首页 >> 产品/行业资讯 >>

C ++函数模板和重载之间的区别

C ++函数模板和重载微信公众号之间的区别:杨元新如果您认为本文对您有所帮助,请留言讨论!首先,让我们看一个示例:#include& lt; iostream& gt;使用命名空间std; // C ++函数模板的两个定义// template& lt;类型名称T& gt;或模板< class T& gt;模板< typename T1& gt; T1 check_max(T1 x,T1​​ y);模板& lt; class T& gt; T print_value(T x,T y); // C ++重载int add(int x,int y); int add(int x,int y,int z);字符串添加(字符串str,字符串str1,字符串str2); int main(void){int x = 33;整数y = 44;长l1 = 333,l2 = 444;浮点数f1 = 3.14,f2 = 3.15926; //系统会自动将T1类型识别为int类型cout& lt;& lt; " max(x,y)="<< check_max(x,y)& lt;& lt;恩德尔//系统会自动将T1类型识别为long cout& lt;& lt; " max(x,y)="<< check_max(l1,l2)& lt;& lt;恩德尔//系统会自动将T1类型识别为float类型cout& lt;& lt; " max(x,y)="<< check_max(f1,f2)& lt;& lt;恩德尔cout& lt;& lt; " ======================================= & lt;& lt;恩德尔print_value(x,y); print_value(l1,l2); print_value(f1,f2); //使用重载的cout& lt;& lt; " ====================================== & lt;& lt;恩德尔cout& lt;& lt; add(x,y)& lt;& lt;恩德尔cout& lt;& lt; add(x,y,x)& lt;& lt;恩德尔cout& lt; & lt; add(“ hello”,“”,“ world”)& lt;& lt;恩德尔返回0;}模板& lt; typename T1& gt; T1 check_max(T1 x,T1​​ y){返回x& gt; ?? x:y;}模板& lt; typename T& gt; T print_value(T x,T y){cout<<“ x:”& lt;< x& lt;& lt;恩德尔cout<< y;"<<< lt; y& lt;& lt; endl;} int add(int x,int y){返回x + y;} int add(int x,int y,int z){return x + y + z;}字符串add(string str,string str1,string str2){return str + str1 + str2;}操作结果:& nbsp;& nbsp;& nbsp;我们可以从代码中了解到,通常有两种方法来定义模板,即:template & lt;类型名称T& gt;或模板。

有人可能会问类型名称和类之间的区别是什么。

实际上,早期的C ++没有关键字typename,因此无论是函数模板还是类模板,都使用class的定义。

C ++在以后很完美,因此有很多类型名称用于区分定义是函数模板还是类模板,但本质是相同的。

& nbsp; & nbsp; & nbsp;所谓功能模板实际上是创建通用功能。

没有指定函数的类型和形式参数的类型,但是使用虚拟类型来表示它。

该一般功能成为功能模板。

具有相同功能主体的任何功能都可以用此模板替换,而不是定义多个功能,只需在模板中定义一次即可。

调用该函数时,系统将根据实际参数的类型替换模板中的虚拟类型。

,从而实现不同功能的功能。

& nbsp; & nbsp; & nbsp;如例程中所示,定义了两个函数模板,checkmax和printvalue,但是我在这里没有定义相关的类。

调用该函数时,可以输出正确的值,这意味着无论是声明还是类型名或类,其本质是相同的,但是我们可以人为地区分它。

checkmax是我们定义的模板函数,用于确定大小,而printvalue用于打印变量数据,仅此而已。

& nbsp; & nbsp;与函数重载相比,模板具有独特的优势。

它不需要重复定义,因此使用起来要比函数重载更为简洁,但是应该注意,函数模板仅适用于函数参数,如果数量相同但类型不同,并且函数主体为同样,如果参数数量不同,则无法使用功能模板。

这是相对于功能重载而言功能模板的缺陷。

& nbsp; & nbsp; & nbsp;让我们再次修改上述程序,我们定义一个与模板函数check_max完全相同的函数名称,实际上这是一个函数重载。

请看以下示例:#include& lt; iostream& gt;使用命名空间std; // C ++函数模板的两种定义方法// template& lt;类型名称T& gt;或模板< class T& gt;模板< typename T1& gt; T1 check_max(T1 x,T1​​ y); // C ++重载int check_max(int x,int y); int main(void){int x = 33;整数y =

欢迎您的咨询