C++ 重载函数与模板函数
1、重载函数
两个以上的函数取相同的函数名,但是函数形参的个数或者类型不同,编译器会根据实参与形参的类型和个数进行最佳匹配,自动确定调用哪一个函数。
example:
int add(int x,int y);
float add(float x,float y);
注意事项:
- 1)重载函数的形参不管是类型还是个数必须有一样是不同的。因为编译器就是看实参和哪个函数的形参的类型及个数匹配,来判断调用哪个函数,如果函数名、 形参类型和个数相同,即使函数返回值类型不同,编译器也会认为是函数重复定义的语法错误,就是说它认为是一个函数。以下两种是错误的重载函数:
int add(int x,int y);
int add(int a,int b);
int add(int x,int y);
void add(int x,int y);
- 2).重载函数都是进行类似的操作,不要把不同的功能定义成重载函数,否则会让人对调用有误解
2、函数模板
函数重载对于功能一致的函数,还是需要写多份代码。函数模板只需写一份代码,通用性更高。函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计。它的最大特点是把函数使用的数据类型作为参数。
函数模板的声明形式:
template
<返回类型><函数名>(参数表)
{
函数体
}
其中,template是定义模板函数的关键字;
template后面的尖括号不能省略;
typename(或class)是声明数据类型参数标识符的关键字,用以说明它后面的标识符是数据类型标识符。
这样,在以后定义的这个函数中,凡希望根据实参数据类型来确定数据类型的变量,都可以用数据类型参数标识符来说明,从而使这个变量可以适应不同的数据类型。