1.缺省参数
在c语言中,函数没有指定参数列表时,默认可以接受任意多个参数
但在c++中,因为严格的参数类型检测,没有参数列表的函数,默认为void,不接受任何参数
- void test()
- {}
- int main()
- {
- test(10);
- test(10,"hello world");
- return 0;
- }
在c语言中可以通过编译
c++对于函数参数检测更加严格,如果函数没有参数则不能接受任何参数
(1)缺省参数概念
缺省参数是声明或定义函数时为函数的参数指定的一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参
- #include <iostream>
- using namespace std;
- void test(int a=0)
- {
- cout<<a<<endl;
- }
- int main()
- {
- test();//没有传参时,使用参数的默认值
- test(10);//传参时,使用指定的实参
- return 0;
- }
(2)缺省参数分类
- 全缺省参数
- void test(int a=0,int b=0,int c=0)
- {
- cout<<"a="<<a<<endl;
- cout<<"b="<<b<<endl;
- cout<<"c="<<c<<endl;
- }
- 半缺省参数
- void test(int a,int b=0,int c=0)
- {
- cout<<"a="<<a<<endl;
- cout<<"b="<<b<<endl;
- cout<<"c="<<c<<endl;
- }
注意:
- 带缺省值的参数必须放在参数列表的最后面
- 缺省参数不能同时在函数声明和定义中出现,只能二者则其一
- 缺省值必须是常量或者全局变量
- C语言不支持
2.函数重载
(1)基本概念
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题
- #include <iostream>
- using namespace std;
- int add(int left,int right)
- {
- return left+right;
- }
- double add(double left,double right)
- {
- return left+right;
- }
- long add(long left,long right)
- {
- return left+right;
- }
- int main()
- {
- add(10,20);
- add(10.0,20.0);
- add(10L,20L);
- return 0;
- }
(2)为什么c语言不能支持函数重载(测试环境:vs2008)
- 最主要的原因是c和c++编译器对于函数的重命名风格不同,比如一个函数的声明如下:
- void func(int x,int y);
- 在c语言中,编译器在编译后在库中的名字为_func,在c++中,编译器在编译后在库中的名字为_func_int_int
- 还有一个函数的声明如下
- void func(float x,float y);
- 在c语言中,编译器在编译后在库中的名字是_func,而在c++中,编译器编译后在库中的名字_func_float_float,在连接时,都是找名字进行连接的,就比如以上两个函数,在c语言中两个的名字一样,就会在连接中报错,c++中它们的名字不一样,因此不会报错。