目录
引入:
定义:
易错案例:
引入:
对于实现相似功能的函数,在命名时,我们常会出现命名重复的问题。对于C语言,编译器遇到这种命名重复的情况,会进行报错。而我们的C++为了更方便程序编写中的命名问题,对此提出了函数重载的概念。
定义:
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同。
实例代码:
void Swap(int *i, int *m)
{
int n = *i;
*i = *m;
*m = n;
}
void Swap(double* i, double* m)
{
double n = *i;
*i = *m;
*m = n;
}
//两个函数构成重载
int main()
{
int i = 10;
int m = 20;
double n = 10.4;
double c = 20.4;
//编译器会自动匹配相应的函数
Swap(&i, &m);
Swap(&n, &c);
return 0;
}
当然还有其它情况这里我们不再进行举例。
易错案例:
1.函数重载与函数的返回值无关
int CExample(int m, int n)
{
return m + n;
}
void CExample(int m, int n)
{
return;
}
//注意这里的两个函数不构成重载
2.函数重载要在同一个作用域(两个不同的命名空间是两个不同的作用域)
namespace laowang {
void Swap(int* i, int* m)
{
int n = *i;
*i = *m;
*m = n;
cout << "laowang" << endl;
}
}
namespace xiaowang {
void Swap(double* i, double* m)
{
double n = *i;
*i = *m;
*m = n;
cout << "xiaowang" << endl;
}
}
结语:为何C++支持函数重载而C语言不支持
这里我们不做多讲,仅仅告知读者原因为:C++在进行函数编译时会对函数的名称进行修饰,而C语言不会。同时函数重载在C语言报错出现在“”编译“或‘’链接‘’这两者其中之一的过程中。当两个函数在同一个头文件里面时它视为基本的语法错误,当它们不在同一个头文件里面时,只有当两个文件链接时才会被编译器发现错误。(链接之前不同的头文件相互独立)