一、C++中的函数重载
什么是函数重载?
我的理解是:
(1)用一个函数名定义不同的函数;
(2)函数名和不同参数搭配时函数会有不同的含义;
举例说明:
#include <stdio.h>
#include <string.h> int func(int x)
{
return x;
} int func(int a, int b)
{
return a+b;
} int func(const char* s)
{
return strlen(s);
} int main(int argc,char* argv[])
{
printf("func(3) = %d\n",func());
printf("func(5,6) = %d\n",func(,));
printf("func(\"file cpp\") = %d\n",func("file cpp")); return ;
}
运行结果:
分析:
函数的重载在使用时,会根据传入的参数去选择执行对应的函数
总结:函数重载至少要满足下面的一个条件
(1)参数个数不同
(2)参数类型不同
(3)参数顺序不同
二、C++中的函数默认参数
举例说明
#include <stdio.h> int func(int a, int b = )
{
return (a+b);
} int main(int argc,char* argv[])
{
printf("func(3) = %d\n",func());
printf("func(3,2)= %d\n",func(,)); return ;
}
运行结果:
二、当函数重载与默认参数同时出现时
在刚刚开始学习的时候,分开学习函数重载和默认参数,两种情况都理解了。但是,突然想到如果这两个同时出现会会出现一个什么样的结果呢?
实例代码:
#include <stdio.h> int func(int a)
{
return (a);
} int func(int a, int b = )
{
return (a+b);
} int main(int argc,char* argv[])
{
printf("func(3) = %d\n",func());
printf("func(3,2)= %d\n",func(,));
printf("test for temp.cpp\n");
return ;
}
写完了后,就在想代码执行后,到底会调用哪一个函数呢?
结果:
编译出错,错误信息:error: call of overloaded ‘func(int)’ is ambiguous printf("func(3) = %d\n",func(3));
分析:
在C++的编译器中,如果出现了函数重载和函数带有默认参数时,编译是会出错的。
总结:
由于C++的语言特性,与C相比多了很多的特性,但是在这些的特性中又会存在一个相互冲突的部分,函数重载与函数默认参数就是其中一个。