1,C++ 可以看成是一种更好的 C 语言,所以 C++ 会考虑 C 的欠缺部分,然后给  与一些补充和扩展,本节课讲述 C++ 对函数参数的非常重要的扩展;

2,函数参数的默认值:

1,C++ 中可以在函数声明时为参数提供一个默认值;

1,也可以在函数声明和定义在一起的时候来提供默认值;

2,作用是当函数调用时没有提供参数的值,则使用默认值;

3,int mul(int x = 0);  // 函数的前项声明,这里使用了默认值;

 int main(int argc, char* argv[])
{
printf("%d\n", mul()); // mul(0) return ;
} int mul(int x) //函数声明的时候提供默认值,定义的时候没有必要提供;
{
return x * x;
}

3,参数的默认值必须在函数声明中指定:

1,问题:

1,函数定义中是否可以出现参数的默认值?

1,不可以,编译出错;

2,当函数声明和定义在一起的时候,可以出现参数的默认值;

2,当函数声明和定义中的参数默认值不同时会发生什么?

1,不可以,编译出错;

2,代码示例:

 int mul(int x = );

 // ...

 int mul(int x = )
{
return x * x;
}

3,默认参数值初探实例分析:

1,main.cpp 文件:

 #include <stdio.h>

 int mul(int x = );

 int main(int argc, char *argv[])
{
printf("%d\n", mul());
printf("%d\n", mul(-));
printf("%d\n", mul()); return ;
} int mul(int x)
{
return x * x;
} /*
int mul(int x = 5) // error: default argument given for parameter 1 of 'int mul(int)'
{
return x * x;
}
*/

2,输出结果:

0

1

4

3,当上述代码用 C 语言编译时,第三行有错,证明了函数参数的默认值   是 C++ 语言对 C 语言的一个扩展;

4,函数默认参数的规则:

1,函数设计时,多个参数的默认值必须从右向左提供;

1,这个设计,是指函数声明或者函数声明和定义在一起的时候;

2,函数调用时,使用了默认值,则后续参数必须使用默认值;

 int add(int x, int y = , int z = )  // 这里即是声明,也是调用;
{
return x + y + z;
} add(); // x = 0, y = 1, z = 2;
add(, ); // x = 2, y = 3, z = 2;
add(, , ); // x = 3, y = 2, z = 1;

5,默认参数的错误示例编程实验:

1,main.cpp 文件:

 #include <stdio.h>

 int add(int x, int y = , int z = ); //当 z 未提供默认值的时候,编译器显示:error: default argument missing for parameter 3 of 'int add(int, int, int)'

 int main(int argc, char *argv[])
{
printf("%d\n", add());
printf("%d\n", add(, ));
printf("%d\n", add(, , )); return ;
} int add(int x, int y, int z)
{
return x + y + z;
}

2,输出结果:

1

3

6.

6,函数占位参数:

1,在 C++ 中可以为函数提供占位参数;

1,占位参数只有参数类型声明,而没有参数名声明;

1,占位参数本质也是函数参数;

2,占位参数:有类无名;

2,一般情况下,在函数体内部无法使用占位参数;

1,没有名字,所以在函数体内部无法使用;

2,代码示例:

 int func(int x, int)
{
return x;
} // ... func(, ); // ok,这是占位参数的用途;

7,函数占位参数的意义:

1,占位参数与默认参数结合起来使用;

2,兼容 C 语言程序中可能出现的不规范写法;

1,void func(); 与 void func(void); 两种声明方式等价吗?

1,在 C 语言中,前者接受任意多参数,后者不接受参数,因此不 等价;

2,在 C++ 语言中,等价;

2,在 C++ 中,最少的改动,就能够兼容 C 程序,且不用带来 bug;

3,代码示例:

 #include <stdio.h>

 void func()  // 从 C 到 C++,更改为 void func(int, int)即可;
{
} int mian(int argc, char* argv[])
{
// func(); //若在 C 中也有这一行代码,C++ 中只用占位参数时,这里错误,可以结合默认参数值,更改为 void func(int = 0, int = 0);
func(, ); // C++ 中不用占位参数时,这里错误; return ;
}

8,占位参数与默认参数值编程实验:

1,main.cpp 文件:

 #include <stdio.h>

 int func(int x, int = );

 int main(int argc, char *argv[])
{
printf("%d\n", func()); // 利用默认参数;
printf("%d\n", func(, )); // 利用占位参数; return ;
} int func(int x, int)
{
return x;
}

9,小结:

1,C++ 中支持函数参数的默认值;

2,如果函数调用时没有提供参数值,则使用默认值;

3,参数的默认值必须使从右向左提供;

4,参数调用时使用了默认值,则后续参数必须使用默认值;

5,C++ 中支持占位参数,用于兼容 C 语言中的不规范写法;

最新文章

  1. LoadRunner函数示例:lr_paramarr_random()
  2. 笔记 进程(processes)
  3. 【原】画流程图工具visio使用技巧汇总
  4. Netty ChannelOption 解释
  5. 【转】Deprecated: Function ereg_replace() is deprecated的解决方法
  6. LARGE_INTEGER
  7. window.location.href的使用方法
  8. php中如何防止表单的重复提交
  9. 亿级数据时,内存性能低于IO性能
  10. HNU 13073 Ternarian Weights 解题报告
  11. java中位运算
  12. Vue自定义标签
  13. C# DataView数据处理的几种方法
  14. Linux下VNC配置使用总结:开启+桌面配置+安全访问
  15. Catlike学习笔记(1.3)-使用Unity画更复杂的3D函数图像
  16. Form 表单验证
  17. en_e outtest2
  18. GridView,datalist添加序号列
  19. cocos2d-x Schedule详解
  20. IoC容器Autofac学习笔记

热门文章

  1. 按照行数分割excel
  2. 014:Django内置的URL转换器
  3. Arduino连接MPU6050陀螺仪
  4. js 反斜杠 处理
  5. 消息队列之--Kafak
  6. POJ 2186 挑战 --牛红人 强连通分量——Tarjan
  7. codevs 1057 津津的储蓄计划 2004年NOIP全国联赛提高组 x
  8. 基于OpenCV/TensorFlow的手写MNIST文字匹配
  9. [Codeforce526F]:Pudding Monsters(分治)
  10. 6.并发编程--volatile