函数默认参数

  • 在C++中,函数的形参列表中的形参是可以有默认值的
  • 语法:返回值类型 函数名 (参数 = 默认值) {}

示例:

  1. #include <iostream>
  2. using namespace std;
  3. // 函数默认参数
  4. // 如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值
  5. // 语法:返回值类型 函数名(形参 = 默认值) {}
  6. int func(int a, int b = 20, int c = 30) {
  7. return a + b + c;
  8. }
  9. // 注意事项
  10. //1.如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
  11. //int func2(int a = 10, int b, int c ,int d) { // 错误
  12. //
  13. // return a +b + c + d;
  14. //}
  15. //2.如果函数声明有默认参数,函数实现就不能有默认参数
  16. // 即声明和实现只能有一个有默认参数
  17. int func2(int a = 10, int b = 30);
  18. int func2(int a, int b) {
  19. return a + b;
  20. }
  21. int main(void) {
  22. cout << func2() << endl;
  23. system("pause");
  24. return 0;
  25. }

函数占位参数

  • C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置

    语法:

    1. - `返回值类型 函数名(数据类型){}`
    • 在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术。

      示例:

  1. #include <iostream>
  2. using namespace std;
  3. // 占位参数
  4. // 返回值类型 函数名 (数据类型) {}
  5. // 目前阶段的占位参数,我们还用不到,后面课程中会用到
  6. // 占位参数 还可以有默认参数
  7. void func(int a, int = 10) {
  8. cout << "this is a func " << endl;
  9. }
  10. int main(void) {
  11. //func(10, 20);
  12. func(10);
  13. system("pause");
  14. return 0;
  15. }

函数重载

函数重载概述

作用:

  1. - 函数名可以相同,提高复用性

函数重载满足的条件:

  1. - 同一个作用域下
  2. - 函数名称相同
  3. - 函数参数类型不同 或者 个数不同 或者 顺序不同

注意:

  1. - 函数的返回值不可以作为函数重载的条件

示例:

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

函数重载注意事项

  • 引用作为重载条件,加const和不加const
    • 若传参为变量,则调用没有const修饰的
    • 若传参为常量,则调用有const修饰的
  • 函数重载碰到函数默认参数,只能尽量避免

    示例:

  1. #include <iostream>
  2. using namespace std;
  3. // 函数重载的注意事项
  4. //1.引用作为重载的条件
  5. void func(const int &a) { // const int &a = 10; 合法
  6. cout << "func (const int &a) 调用" << endl;
  7. }
  8. void func(int& a) { // int &a = 10; 不合法
  9. cout << "func (int &a)调用" << endl;
  10. }
  11. //2.函数重载碰到默认参数
  12. void func2(int a, int b = 10) {
  13. cout << "func2 (int a, int b)的调用" << endl;
  14. }
  15. void func2(int a) {
  16. cout << "func2 (int a)的调用" << endl;
  17. }
  18. int main(void) {
  19. int a = 10;
  20. func(a);
  21. func(10);
  22. //func2(10); // 当函数重载碰到默认参数,出现二义性,报错,尽量避免这种情况
  23. func2(10,20);
  24. return 0;
  25. }