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 语言中的不规范写法;

C++中函数参数的扩展的更多相关文章

  1. (转)python中函数参数中如果带有默认参数list的特殊情况

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]):     for i in range(x):         ...

  2. c语言中函数参数入栈的顺序是什么?为什么

    看到面试题C语言中函数参数的入栈顺序如何? 自己不知道,边上网找资料.下面是详细解释 #include <stdio.h> void foo(int x, int y, int z){   ...

  3. python中函数参数的引用方式

    值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...

  4. php与js中函数参数的默认值设置

    php函数参数默认值设置: <?phpfunction test($val=3){   echo $val."<br/>";}test(11);test();?& ...

  5. JavaScript中函数参数的按值传递与按引用传递(即按地址传递)

    首先声明一句:JavaScript中所有函数的参数都是按值传递的!不存在按引用传递! 在讲传递参数之前我们先来讲一下指针. 学过C指针的应该都知道,指针变量中保存的是一个地址,程序可以根据所保存的地址 ...

  6. JS中函数参数和函数返回值的理解

    函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能 ...

  7. JavaScript中函数参数的值传递和引用传递

    结论: 对于数字.字符串等基本类型变量,是将它们的值传递给了函数参数,函数参数的改变不会影响函数外部的变量. 对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(数组) ...

  8. C++解析(6):函数参数的扩展

    0.目录 1.函数参数的默认值 2.函数默认参数的规则 3.函数占位参数 4.小结 1.函数参数的默认值 C++可以在函数声明时为参数提供一个默认值 当函数调用时没有提供参数的值,则使用默认值 参数的 ...

  9. Delphi 中 函数参数中的 const 修饰符的本质以及注意事项

    来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------ ...

随机推荐

  1. excel中汉字转拼音

    Excel中文转拼音(完整版)打开Excel->工具->宏->Viaual Basic编辑器在弹出来的窗口中对着VBAproject点右键->插入->模块下面会出现一个名 ...

  2. 【NOIP2016提高A组五校联考1】排队

    题目 分析 首先预处理出每个点的优先级,当有一个人进入时,一定会走到优先级最大的空房间中. 把所有空的房间扔到一个堆中,按优先级大小维护这个堆. 答案怎么求就不说了,很容易想到,就只讲操作吧. 对于第 ...

  3. 电脑右键新建没有xmind文件选项解决方法

    xmind还是方便的. 打开注册表,展开HKEY_CLASSES_ROOT,展开.xmind(如果没有请新建).在里面新建ShellNew项,并展开,在里面新建NullFile这个字符串值. 如果还是 ...

  4. 解决eclipse部署maven项目无法导入lib的问题

    eclipse版本为2018-12(4.10.0) 1.默认tomcat的server配置 改成: 2.项目部署 按上面的配置,项目会部署到你配置的本地tomcat的webapps目录下. 部署了项目 ...

  5. BigDecimal除法问题

    BigDecimal类的主要功能是进行小数的大数计算,而且最重要的是可以精确到指定的四舍五入位数. 如果要进行四舍五入的操作,则必须依靠以下的方法:public BigDecimal divide(B ...

  6. 虚拟机使用桥接模式连接网络并且设置静态ip

    1.桥接模式连接网络 虚拟机连接网络一共有四种模式,我这里只介绍桥接模式,毕竟坑了我几个小时 设置有线连接,我本来用的无线连接完成微信点餐系统,后来换了有线因为有线连接不会分配ip,和本地电脑使用同一 ...

  7. 【转】Python Schema一种优雅的数据验证方式

    转自 https://segmentfault.com/a/1190000011777230 Schema是什么? 不管我们做什么应用,只要和用户输入打交道,就有一个原则--永远不要相信用户的输入数据 ...

  8. BZOJ 2731 Luogu P3219 [HNOI2012]三角形覆盖问题 (扫描线)

    题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=2731 (luogu)https://www.luogu.org/probl ...

  9. ali之monkey学习

    monkey主要用来进行压力测试,稳定性测试 http://www.cnblogs.com/yyangblog/archive/2011/03/10/1980068.html 1,什么是monkey ...

  10. eclipse 简单配置

    1.安装STS4 help-->Eclipse Maketplace-->search 'STS'-->install 2.代码提示 Window-->preferences- ...