目录
引入:
定义:
易错案例:
引入:
对于实现相似功能的函数,在命名时,我们常会出现命名重复的问题。对于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语言报错出现在“”编译“或‘’链接‘’这两者其中之一的过程中。当两个函数在同一个头文件里面时它视为基本的语法错误,当它们不在同一个头文件里面时,只有当两个文件链接时才会被编译器发现错误。(链接之前不同的头文件相互独立)