函数重载(Function Overload) 用同一个函数名定义不同的函数 当函数名和不同的参数搭配时函数的含义不同
函数重载至少满足下面的一个条件: 参数个数不同 参数类型不同 参数顺序不同 函数返回类型不是函数重载的判断标准!!! int =0占位符也不是函数重载的判断标准!!! void myprintf(int a, int b) { printf("a:%d, b:%d\n", a, b); } void myprintf(int a, int b, int =0) { printf("a:%d, b:%d c:%d \n", a, b); return a; } 无法重载,传入两个参数时,无法确认调用哪个 void myprintf(int a, int b) { printf("a:%d, b:%d\n", a, b); } void myprintf(int a, int b, int) //必须输入三个参数 { printf("a:%d, b:%d c:%d \n", a, b); return a; } 两者可以编译通过,但是没有意义,因为传第三个参数也没用 void myprintf(int a, int b) { printf("a:%d, b:%d\n", a, b); } void myprintf(int a, int b, int c = 0) { printf("a:%d, b:%d c:%d \n", a, b); return a; } 无法重载,传入两个参数时,无法确认调用哪个 |
函数重载遇上函数默认参数 |
//当函数默认参数遇上函数重载会发生什么 /* int func(int a, int b, int c = 0) { return a * b * c; }
int func(int a, int b) { return a + b; }
int main() { int c = 0;
c = func(1, 2); // 存在二义性,调用失败,编译不能通过
printf("c = %d\n", c);
printf("Press enter to continue ..."); getchar(); return 0; } */
/* 编译器调用重载函数的准则 将所有同名函数作为候选者 尝试寻找可行的候选函数 精确匹配实参 通过默认参数能够匹配实参 通过默认类型转换匹配实参 |
函数重载
最新推荐文章于 2023-12-25 22:13:20 发布