函数重载
函数重载是在C语言的学习中未涉及的新概念。我们在编程时经常会遇到这样一个问题:我们编写完一个函数准备准备调用时,一旦需要传入不同的数据类型的参数时,一个函数无法实现,我们又必须重写另一个或者多个命名不用的功能近似的函数才能实现其操作,但是显然,对于实现相同功能传入不同的数据类型参数却需要调用不同名的函数,这增加了无谓的难度。这时,函数重载提供给了我们一个解决方法.
(1)定义:两个或者以上的具有相同函数名,但是形参类型或者个数不同,编译器会根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。
有了函数重载之后,我们在函数功能近似但函数参数不同的情况下,无须对函数命名不同的名字,编译器会自动匹配。
例如对x+y函数功能的实现:
#include<iostream> using namespace std; int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } int main() { int a, b; double c, d; cout << "输入两个int值" << endl; cin >> a >> b; cout << "输入两个double值" << endl; cin >> c >> d; cout << "int值的和为" << add(a, b)<<endl; cout << "double值的和为" << add(c, d) << endl; return 0; }
输出结果为:
代码编译可以表明:对于调用相同函数名函数,编译器会自动匹配。
注意:重载函数的参数必须在参数个数或者类型方面有所不同,如果函数名相同,形参类型也相同,在编译时会被认为是语法错误。
重载函数的正确表现形式:
int add(int x,int y); double add(double x,double y);
或者:
int add(int x,int y); int add(int x,int y ,int z);
需要额外注意的是,不要将不同功能的函数定义为重载函数,以免出现对调用函数结果的误解、混淆。
(2)当使用函数重载时,应避免出现二义性,这也会使编译器出现语法错误。
声明:
int add(int x, int y=1,int z=2); int add(int x);
调用:
add(1);
此时便会出现语法错误。
(3)总结出现二义性的情况:
1、形参个数一致,仅仅是形参名或者返回值不同
2、重载函数有一个形参有默认参数时
3、重载函数形参在同位置分别类型为传值或者传引用。