3. 函数

3.1 函数默认参数

  1. 1 #include<iostream>
  2. 2 using namespace std;
  3. 3
  4. 4 //函数的默认参数
  5. 5 //自己传参,就用自己的,如果没有,就用默认值
  6. 6 int func(int a, int b = 20, int c = 30)
  7. 7 {
  8. 8 return a + b + c;
  9. 9 }
  10. 10
  11. 11 //注意:
  12. 12 //1.如果某个位置有了默认参数,那么从这个位置往后,从左到右必须有默认参数
  13. 13 //2.如果函数声明中有默认参数,函数实现就不能有默认参数
  14. 14 //即,声明和实现只能一个有默认参数
  15. 15 int func2(int a = 10, int b = 20);
  16. 16
  17. 17 //int func2(int a = 20, int b = 30) {
  18. 18 // return a + b;
  19. 19 //}
  20. 20 // 报错,重定义默认参数
  21. 21
  22. 22 int main() {
  23. 23
  24. 24 cout << func(10, 20, 30) << endl;
  25. 25 cout << func2(10, 20) << endl;
  26. 26
  27. 27 system("pause");
  28. 28
  29. 29 return 0;
  30. 30 }
  31. 31
  32. 32 //总结
  33. 33 //在C++中,函数的形参列表中的形参可以有默认值的
  34. 34 //语法:返回值类型 函数名 (参数=参数默认值){}
  35. 35 //

3.2 函数占位参数

  1. 1 #include<iostream>
  2. 2 using namespace std;
  3. 3
  4. 4 //函数占位参数,占位参数也可以有默认参数
  5. 5 void func(int a, int = 10) {
  6. 6 cout << "a = " << a << endl;
  7. 7 }
  8. 8
  9. 9 int main() {
  10. 10
  11. 11 int a = 10;
  12. 12 int b = 20;
  13. 13
  14. 14 func(a, b);
  15. 15
  16. 16 system("pause");
  17. 17
  18. 18 return 0;
  19. 19 }
  20. 20
  21. 21 //总结
  22. 22 //形参列表可以有占位参数,用作占位,调用函数时必须填补该位置
  23. 23 //语法:返回值类型 函数名(数据类型){}

3.3.1 函数重载概述

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. //函数重载
  5. //让函数名相同,提高复用性
  6.  
  7. void func() {
  8. cout << "func的函数调用" << endl;
  9. }
  10.  
  11. void func(int a) {
  12. cout << "func的函数调用!" << endl;
  13. }
  14.  
  15. int main() {
  16.  
  17. func(3);
  18.  
  19. system("pause");
  20.  
  21. return 0;
  22. }
  23.  
  24. //总结
  25. //作用:函数名可以相同,提高复用性
  26. //函数重载满足条件:
  27. //1.同一个作用域下
  28. //2.函数名称相同
  29. //3.函数参数类型不同 或者 个数不同 或者 顺序不同
  30. //注意:函数的返回值不可以作为函数重载的得条件

3.3.2 函数重载注意事项

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. //函数重载注意事项
  5. //1.引用作为重载条件
  6. void func(int& a) { // int &a = 10; 不合法的
  7. cout << "func (int &a)的调用" << endl;
  8. }
  9.  
  10. void func(const int& a) { // const int &a = 10; //会做转换
  11. cout << "func (const int &a)的调用" << endl;
  12. }
  13.  
  14. //2.函数重载遇到默认参数
  15. void func2(int a, int b = 10) {
  16. cout << "func2 (int a, int b)的调用" << endl;
  17. }
  18.  
  19. void func2(int a) {
  20. cout << "func2 (int a)的调用" << endl;
  21. }
  22.  
  23. int main() {
  24.  
  25. int a = 10;
  26. func(a); // func (int &a)的调用
  27.  
  28. func(10); // func (const int &a)的调用
  29.  
  30. //func2(10); //当函数重载碰到默认参数,出现二义性,报错,编程时尽量避免
  31.  
  32. system("pause");
  33.  
  34. return 0;
  35. }
  36.  
  37. //总结
  38. //引用作为重载条件
  39. //函数重载碰到默认参数

参考:《黑马程序员》C++教程

C++基础-3-函数的更多相关文章

  1. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  2. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  3. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  4. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  5. Java之--Java语言基础组成—函数

    Java语言基础组成-函数 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的函数,函数 ...

  6. 数据分析与展示——Matplotlib基础绘图函数示例

    Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...

  7. JavaSE语法基础(3)---函数、数组

    JavaSE语法基础(3)---函数.数组 函数的概念:实现特定功能的一段代码,可反复使用. 函数的出现减少代码冗余,提高代码的复用性,可读性,可维护性,可以使每个功能模块独立起来,方便分工合作. 函 ...

  8. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  9. Go语言基础之函数

    Go语言基础之函数 函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于“一等公民”. 函数 ...

  10. 第二周 数据分析之展示 Matplotlib基础绘图函数实例

    Pyplot基础图表函数 Pyplot饼图的绘制: Pyplot直方图的绘制: Pyplot极坐标图的绘制: Pyplot散点图的绘制: 单元小结: import numpy as np import ...

随机推荐

  1. SpringBoot打包成可执行的Jar文件

    需要时SpringBoot项目 通过创建可以在生产环境中运行的完全独立的可执行jar文件来结束示例.可执行jar(有时称为"胖jar")是包含您的已编译类以及代码需要运行的所有ja ...

  2. 转:C++经典排序算法总结

    转载至:https://www.cnblogs.com/fnlingnzb-learner/p/9374732.html 一.算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 非线性时间比 ...

  3. Centos最小化安装

    1.选择最小安装: 2.选择相应的安装包 老男孩提示: 1.根据经验,选择安装包时应该按最小化原则,即不需要的或者不确定是否需要的就不安装,这样可以最大程度上确保系统安全. 2.如果安装过程落了部分包 ...

  4. STM32 中的 assert_param 函数

    在学STM32的时候函数assert_param出现的几率非常大,上网搜索一下,网上一般解释断言机制,做为程序开发调试阶段时使用. 断言机制函数assert_param我们在分析库函数的时候,几乎每一 ...

  5. C++ | 简单工厂模式 | 复数计算器

    简单工厂模式最直观的一个应用便是实现一个计算器的程序. 比如,公司让你给计算器添加一个幂运算的功能,你只需要设计一个幂运算的类,并实现幂运算的逻辑,然后让该类继承自运算类即可. 简单工厂模式: 简单工 ...

  6. 控制算法的划分(自适应控制、预测控制、模糊控制等,PID等;蚁群算法、神经网络,还有机器学习、人工智能中的很多方法)

    一般来说,控制器的设计,分为控制框架的选取,跟参数的优化.自适应控制.预测控制.模糊控制等,跟PID一样,是控制算法(我习惯称为控制框架). 而粒子群.遗传算法(类似的还有蚁群算法.神经网络,还有机器 ...

  7. C语言泛型编程——泛型冒泡排序

    在实际编程中,常常会需要一些方法(函数),比如排序,它们具体实现基本一致,仅仅只有参数类型不同, 那么可不可以有一种通用的函数,不管是什么类型的参数都可以通用呢? 泛型编程:泛型即是指具有在多种数据类 ...

  8. iView 一周年了,同时发布了 2.0 正式版,但这只是开始...

    两年前,我开始接触 Vue.js 框架,当时就被它的轻量.组件化和友好的 API 所吸引.之后我将 Vue.js 和 Webpack 技术栈引入我的公司(TalkingData)可视化团队,并经过一年 ...

  9. Flex 布局新旧混合写法详解(兼容微信)

    flex 是个非常好用的属性,如果说有什么可以完全代替 float 和 position ,那么肯定是非它莫属了(虽然现在还有很多不支持 flex 的浏览器).然而国内很多浏览器对 flex 的支持都 ...

  10. C#设计编写一个控制台应用程序

    设计编写一个控制台应用程序,练习类的继承. (1) 编写一个抽象类 People,具有"姓名","年龄"字段,"姓名"属性,Work 方法. ...