一、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) = %d\n",func(3)); 22 printf("func(5,6) = %d\n",func(5,6)); 23 printf("func(\"file cpp\") = %d\n",func("file cpp")); 24 25 return 0; 26 }
运行结果:
分析:
函数的重载在使用时,会根据传入的参数去选择执行对应的函数
总结:函数重载至少要满足下面的一个条件
(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) = %d\n",func(3)); 11 printf("func(3,2)= %d\n",func(3,2)); 12 13 return 0; 14 }
运行结果:
二、当函数重载与默认参数同时出现时
在刚刚开始学习的时候,分开学习函数重载和默认参数,两种情况都理解了。但是,突然想到如果这两个同时出现会会出现一个什么样的结果呢?
实例代码:
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) = %d\n",func(3)); 16 printf("func(3,2)= %d\n",func(3,2)); 17 printf("test for temp.cpp\n"); 18 return 0; 19 }
写完了后,就在想代码执行后,到底会调用哪一个函数呢?
结果:
编译出错,错误信息:error: call of overloaded ‘func(int)’ is ambiguous printf("func(3) = %d\n",func(3));
分析:
在C++的编译器中,如果出现了函数重载和函数带有默认参数时,编译是会出错的。
总结:
由于C++的语言特性,与C相比多了很多的特性,但是在这些的特性中又会存在一个相互冲突的部分,函数重载与函数默认参数就是其中一个。