C++缺省参数与函数重载

1.缺省参数
    在c语言中,函数没有指定参数列表时,默认可以接受任意多个参数
    但在c++中,因为严格的参数类型检测,没有参数列表的函数,默认为void,不接受任何参数
[csharp]  view plain  copy
  1. void test()  
  2. {}  
  3.   
  4. int main()  
  5. {  
  6.     test(10);  
  7.     test(10,"hello world");  
  8.     return 0;  
  9. }   


在c语言中可以通过编译

c++对于函数参数检测更加严格,如果函数没有参数则不能接受任何参数

(1)缺省参数概念
    缺省参数是声明或定义函数时为函数的参数指定的一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参
[csharp]  view plain  copy
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. void test(int a=0)  
  5. {  
  6.     cout<<a<<endl;  
  7. }  
  8.   
  9. int main()  
  10. {  
  11.     test();//没有传参时,使用参数的默认值  
  12.     test(10);//传参时,使用指定的实参  
  13.     return 0;  
  14. }   
(2)缺省参数分类
  • 全缺省参数
[csharp]  view plain  copy
  1. void test(int a=0,int b=0,int c=0)  
  2. {  
  3.     cout<<"a="<<a<<endl;  
  4.     cout<<"b="<<b<<endl;  
  5.     cout<<"c="<<c<<endl;  
  6. }  
  • 半缺省参数
[csharp]  view plain  copy
  1. void test(int a,int b=0,int c=0)  
  2. {  
  3.     cout<<"a="<<a<<endl;  
  4.     cout<<"b="<<b<<endl;  
  5.     cout<<"c="<<c<<endl;  
  6. }  

注意:

  • 带缺省值的参数必须放在参数列表的最后面
  • 缺省参数不能同时在函数声明和定义中出现,只能二者则其一
  • 缺省值必须是常量或者全局变量
  • C语言不支持
2.函数重载

(1)基本概念

函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题

[csharp]  view plain  copy
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. int add(int left,int right)  
  5. {  
  6.     return left+right;  
  7. }  
  8.   
  9. double add(double left,double right)  
  10. {  
  11.     return left+right;  
  12. }  
  13.   
  14. long add(long left,long right)  
  15. {  
  16.     return left+right;  
  17. }  
  18. int main()  
  19. {  
  20.     add(10,20);  
  21.     add(10.0,20.0);  
  22.     add(10L,20L);  
  23.     return 0;  
  24. }   
(2)为什么c语言不能支持函数重载(测试环境:vs2008)

  • 最主要的原因是c和c++编译器对于函数的重命名风格不同,比如一个函数的声明如下:
[csharp]  view plain  copy
  1. void func(int x,int y);  
  • 在c语言中,编译器在编译后在库中的名字为_func,在c++中,编译器在编译后在库中的名字为_func_int_int
  • 还有一个函数的声明如下
[csharp]  view plain  copy
  1. void func(float x,float y);  
  • 在c语言中,编译器在编译后在库中的名字是_func,而在c++中,编译器编译后在库中的名字_func_float_float,在连接时,都是找名字进行连接的,就比如以上两个函数,在c语言中两个的名字一样,就会在连接中报错,c++中它们的名字不一样,因此不会报错。

猜你喜欢

转载自blog.csdn.net/qq_40955914/article/details/80715101