C++的函数

1. 支持重载

  • 概念:
    在同一作用域当中,函数名相同,参数列表不同的函数可以存在多个,返回值随意。
    eg:
    void f(int a);<br />int f(int a, int b);
  • 助记:
    同一作用域,同名不同参
  • 原理:
    C++编译器通过函数换名,将参数列表的信息整合到新的函数名中。
  • 示例: ```cpp

    include

    using namespace std;

int add1(int a, int b) { return a + b; }

double add2(double a, double b) { return a + b; }

double add3(double a, double b, double c) { return a + b + c; }

/ 函数重载两点形式: 1>函数同名不同参 2>函数同名同参不同常(不同返回值类型) */ int add(int a, int b) { return a + b; }

double add(double a, double b) { return a + b; }

double add(double a, double b, double c) { return a + b + c; }

int main(int argc, char const *argv[]) { cout << “c 风格” << endl; cout << add1(1, 2) << endl; cout << add2(1.1, 2.1) << endl; cout << add3(1.1, 2.1, 3.1) << endl;

  1. cout << "c++ 函数重载" << endl;
  2. cout << add(1, 2) << endl;
  3. cout << add(1.1, 2.1) << endl;
  4. cout << add(1.1, 2.1, 3.1) << endl;
  5. return 0;

}

  1. <a name="QteKa"></a>
  2. ## 2. 支持形参默认值
  3. eg:` void szjx(string name, int rmb = 1000, int level = 1)`
  4. - 两点注意:
  5. - 1.连续靠右原则
  6. - 如果只有一个参数带默认值,则只能是最右边的参数
  7. - 如果有多个形参带默认值,则这些形参位置要连续,而且要靠右。因为实参的传递是从左边开始匹配。
  8. - 2.函数的声明和定义分开时: 声明时写默认值,定义时不写默认值
  9. - 示例:
  10. ```cpp
  11. #include <iostream>
  12. #include <string>
  13. using namespace std;
  14. // 定义和声明写分开写
  15. void szjx(string name, int rmb = 1000, int level = 1);
  16. int main(int argc, char const *argv[]) {
  17. szjx("小明", 1000, 1);
  18. szjx("小刚");
  19. szjx("小强", 2000, 3);
  20. //szjx(); // error, 没有默认值的参数必须要传参
  21. return 0;
  22. }
  23. void szjx(string name, int rmb, int level) {
  24. cout << name << "做出了重要贡献, 工资加" << rmb << "元。职位上升" << level << "级." << endl;
  25. }

3. 支持哑元形参

  • 概念:
    eg: void f(int)
    • 形参只有类型,没有变量名,调用时随便给一个值
    • 如果某个形参在函数体中没被用到,则该参数可以设置为哑元
  • 应用场景:
    • 兼容旧版本函数
      void baoxiao(int a);
      //2018版需要区分“新农合医保”,“城镇居民医保”
      void baoxiao(int);
      //2019版修改了实现,没有用到形参a,int 只是占个位置,保持接口不变。
    • 运算符重载
      运算符++重载时会用到。
  • 示例: ```cpp

    include

    using namespace std;

void f(int) { cout << “f(int)” << endl; }

/ void baoxiao(bool a) { // 旧版 if(a == true){ cout << “报销80%” << endl; }else{ cout << “报销60%” << endl; } } /

void baoxiao(bool) { // 新版 cout << “报销80%” << endl; }

int main(int argc, char const *argv[]) { f(888); baoxiao(true); return 0; }

<a name="ZVKbs"></a>
# 4. 支持内联声明

- 对内联函数,在编译时编译器将函数调用语句用函数体替换,类似于C语言中的宏展开
```cpp
inline int add(int a, int b) {
    return (a + b);
}
int var = add(1, 2);    ->   int val = 1+2;
  • 内敛优化避免了函数调用的开销,提高了代码的执行效率,但如果函数体包含的语句较多,就会增加代码体积,因此仅适用于短小简单的函数。
  • 内联只是个请求,不一定实现