C++函数重载遇到了函数默认参数情况

一、C++中的函数重载

什么是函数重载?

我的理解是:

(1)用一个函数名定义不同的函数;

(2)函数名和不同参数搭配时函数会有不同的含义;

举例说明:

1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int func(int x)
 5 {
 6     return x;
 7 }
 8 
 9 int func(int a, int b)
10 {
11     return a+b;
12 }
13 
14 int func(const char* s)
15 {
16     return strlen(s);
17 }
18 
19 int main(int argc,char* argv[])
20 {
21     printf("func(3)            = %dn",func(3));
22     printf("func(5,6)          = %dn",func(5,6));
23     printf("func("file cpp") = %dn",func("file cpp"));
24     
25     return 0;
26 }

运行结果:

C++函数重载遇到了函数默认参数情况

分析:

函数的重载在使用时,会根据传入的参数去选择执行对应的函数

总结:函数重载至少要满足下面的一个条件
(1)参数个数不同(2)参数类型不同(3)参数顺序不同二、C++中的函数默认参数举例说明

1 #include <stdio.h>
 2 
 3 int func(int a, int b = 0)
 4 {
 5     return (a+b);
 6 }
 7 
 8 int main(int argc,char* argv[])
 9 {
10     printf("func(3)  = %dn",func(3));
11     printf("func(3,2)= %dn",func(3,2));
12 
13     return 0;
14 }

运行结果:

C++函数重载遇到了函数默认参数情况
二、当函数重载与默认参数同时出现时在刚刚开始学习的时候,分开学习函数重载和默认参数,两种情况都理解了。但是,突然想到如果这两个同时出现会会出现一个什么样的结果呢?实例代码:

1 #include <stdio.h>
 2 
 3 int func(int a)
 4 {
 5     return (a);
 6 }
 7 
 8 int func(int a, int b = 0)
 9 {
10     return (a+b);
11 }
12 
13 int main(int argc,char* argv[])
14 {
15     printf("func(3)  = %dn",func(3));
16     printf("func(3,2)= %dn",func(3,2));
17     printf("test for temp.cppn");
18     return 0;
19 }

写完了后,就在想代码执行后,到底会调用哪一个函数呢?

结果:
编译出错,错误信息:error: call of overloaded ‘func(int)’ is ambiguous printf("func(3) = %dn",func(3));分析:在C++的编译器中,如果出现了函数重载和函数带有默认参数时,编译是会出错的。总结:由于C++的语言特性,与C相比多了很多的特性,但是在这些的特性中又会存在一个相互冲突的部分,函数重载与函数默认参数就是其中一个。原文链接: https://www.cnblogs.com/zou107/p/5730784.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/237987

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午5:37
下一篇 2023年2月13日 下午5:37

相关推荐