一、默认参数

在C++中,可以为参数指定默认值。在函数调用时没有指定与形参相对应的实参时, 就自动使用默认参数。

默认参数的语法与使用:
(1)在函数声明或定义时,直接对参数赋值。这就是默认参数;

(2)在函数调用时,省略部分或全部参数。这时可以用默认参数来代替。

注意:
(1)默认参数只可在函数声明中设定一次。只有在没有函数声明时,才可以在函数定义中设定。(#add ,此句意为存在函数声明和定义两部分的时候。验证表明有这个限制,可以随便,但出于规范,在声明中指定)

(2)如果一个参数设定了缺省值时,其右边的参数都要有缺省值。(#add 这是定义时, 使用时该怎样待总结)

如:int mal(int a, int b=3, int c=6, int d=8)    正确,按从右到左顺序设定默认值。

        int mal(int a=6, int b=3, int c=5, int d)   错误,未按照从右到左设定默认值。c设定缺省值了,而其右边的d没有缺省值。
(3)默认参数调用时,则遵循参数调用顺序,自左到右逐个调用。这一点要与第(2)分清楚,不要混淆。(#add 神马意思啊? 暂理解为两个默认参数之间的参数必须赋缺省值)
如:void   mal(int a, int b=3, int c=5);      //默认参数

           mal(3, 8, 9 );                          //调用时有指定参数,则不使用默认参数

           mal(3, 5);                       //调用时只指定两个参数,按从左到右顺序调用,相当于mal(3,5,5);

              mal(3);                           //调用时只指定1个参数,按从左到右顺序调用,相当于mal(5,3,5);

              mal( );                           //错误,因为a没有默认值

              mal(3, , 9)                      //错误,应按从左到右顺序逐个调用

再如: void mal(int a=8, int b=3, int c=5);      //默认参数

               mal( );                                                      //正确,调用所有默认参数,相当于mal(8,3,5);

(4)默认值可以是全局变量、全局常量,甚至是一个函数。但不可以是局部变量。因为默认参数的调用是在编译时确定的,而局部变量位置与默认值在编译时无法确定。

二、函数重载

在相同的声明域中,函数名相同,而参数表不同。通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数用法。

参数表的不同表现为:

1、参数类型不同;

2、参数个数不同;

特别注意:返回类型不同不可以作为函数重载的标识。

函数重载的注意事项

1、函数的形参必须不同,或者个数不同,或者类型不同,不能够只依靠函数的返回值类型不同或形参变量名不同来实现函数重载。

2、不要将不同功能的函数定义为重载函数,以免出现对调用结果的误解。如:

int add(int x,int y)

{

return x+y;

}

float add(float x,float y)

{

return x-y;

}

重载函数与默认参数重叠导致的二义性问题:

func(int);                                                                               //重载函数1,只有1个参数,无默认参数

func(int, int =4);                                                                   //重载函数2,有2个参数,有1个默认参数

func(int a=3, int b=4, int c=6);                                            //重载函数3,有3个参数,有3个默认参数

fucn(float a=3.0, float b=4.0 float c=5.0);                             //重载函数4,有3个参数,有3个默认参数

fucn(float a=3.0, float b=4.0 float c=5.0 float d=7.9 );          //重载函数5,有4个参数,有4个默认参数

func(2);                  //可调用前3个函数,出现二义性

func(2.0);               //可调用后2个函数,出现二义性

所以当重载函数与默认参数共同使用时,要注意出现二义性问题。

最新文章

  1. Android Studio MultiDex 分包碰到的坑
  2. WebService 之 WSDL文件 讲解
  3. ahjesus sql2005+游标示例
  4. OpenCV IplImage FlyCapture2 Image Conversion 两种图像类的相互转化
  5. source insight技巧
  6. mysql事务与mysql储存引擎
  7. C# 学习的随笔【随时更新】
  8. Python 学习日记(第二周)
  9. is,as,sizeof,typeof,GetType
  10. 网络资源(6) - EJB视频
  11. 2.Git配置和关联GitHub
  12. IBM Watson启示录:AI不应该仅仅是炫技
  13. 性能测试中的最佳用户数、最大用户数、TPS、响应时间、吞吐量和吞吞吐率
  14. C#获取文件夹下面的所有文件名
  15. Javascript入门(二)变量、获取元素、操作元素
  16. Using a ScrollView - RN4
  17. 在chrome console添加jQuery支持
  18. 有序广播和标准广播 --Android开发
  19. js获取select标签选中的值及文本
  20. windos或linux中 which命令 查看当前要执行的命令所在的路径

热门文章

  1. Linux下的lds链接脚本简介(一)
  2. CentOS 更改Apache默认网站目录
  3. Hadoop架构设计、执行原理具体解释
  4. Fp关联规则算法计算置信度及MapReduce实现思路
  5. 微信小程序 自定义组件(modal) 引入组件
  6. hdu1576 mod 运算的逆元
  7. 安全相关的head头
  8. Form content types
  9. Mac mysql 运行sql文件中文乱码的问题
  10. jfreechart应用1--环境配置