• C++学习 --函数


    目录

    1, 函数定义

    1-1, 有返回值

    1-2, 无返回值

    2, 函数声明

    3, 函数分文件编写

    3-1, 创建自定义头文件

    3-2, 创建源文件

    3-3, 自定义头文件中编写函数声明

    3-4, 在源文件中编写函数定义

    3-5, 主文件添加自定义头文件

    4, 默认参数

    5, 占为参数

    6, 函数重载

    6-1, 参数个数不同重载

    6-2, 参数类型不同重载

    6-3, 参数顺序不同重载

    6-4, 引用做函数重载


    1, 函数定义

    函数需要先定义, 再使用, 否则需要对函数进行声明后才能使用

    1-1, 有返回值

    通过数据类型 函数名(数据类型 参数){语句块 return 同函数数据类型}, 可定义一个有返回值函数

    1. #include
    2. using namespace std;
    3. //定义函数add
    4. int add(int num1, int num2)
    5. {
    6. int sum = num1 + num2;
    7. return sum;
    8. }
    9. int main()
    10. {
    11. cout << add(100, 200) << endl;
    12. system("pause");
    13. return 0;
    14. }

    1-2, 无返回值

    通过void 函数名(数据类型 参数){语句块}, 可定义一个无返回值函数

    1. #include
    2. using namespace std;
    3. //定义无返回值的函数,需要用void
    4. void swap(int num1, int num2)
    5. {
    6. int tmp = 0;
    7. cout << "交换前的数据:" << endl;
    8. cout << "num1 = " << num1 << endl;
    9. cout << "num2 = " << num2 << endl;
    10. tmp = num1;
    11. num1 = num2;
    12. num2 = tmp;
    13. cout << "交换前的数据:" << endl;
    14. cout << "num1 = " << num1 << endl;
    15. cout << "num2 = " << num2 << endl;
    16. //void类型的函数,不需要return
    17. }
    18. int main()
    19. {
    20. int num1 = 10;
    21. int num2 = 20;
    22. //调用swap函数
    23. swap(num1, num2);
    24. system("pause");
    25. return 0;
    26. }

    2, 函数声明

    若调用函数在main函数后定义,则需要通过数据类型 函数名(数据类型 参数)的方式, 先对函数进行声明; 若在main函数前定义的函数,则不需要声明

    1. #include
    2. using namespace std;
    3. //对max_1进行声明
    4. int max_1(int num1, int num2);
    5. int main()
    6. {
    7. int num1 = 10;
    8. int num2 = 20;
    9. //调用swap函数
    10. cout << "较大的值为:" << max_1(num1, num2) << endl;
    11. system("pause");
    12. return 0;
    13. }
    14. //max_1函数在main函数后,使用的时候需要声明
    15. int max_1(int num1, int num2)
    16. {
    17. return num1 > num2 ? num1 : num2;
    18. }

    3, 函数分文件编写

    先在项目中创建一个头文件, 再创建一个源文件, 在自定义头文件中编写函数声明, 在源文件中编写函数定义, 在主文件中通过#include "自定义头文件"添加自定义头文件

    下面以输出两个数字中较大值的函数举例

    3-1, 创建自定义头文件

    3-2, 创建源文件

    3-3, 自定义头文件中编写函数声明

    1. #include
    2. using namespace std;
    3. int swap(int num1, int num2);

    3-4, 在源文件中编写函数定义

    1. //#include "swap.h"的作用:指定该文件使用的头文件为swap.h
    2. #include "swap.h"
    3. #include
    4. using namespace std;
    5. //函数定义
    6. int swap(int num1, int num2)
    7. {
    8. return num1 > num2 ? num1 : num2;
    9. }

    3-5, 主文件添加自定义头文件

    1. //添加头文件
    2. #include "swap.h"
    3. int main()
    4. {
    5. int num1 = 10;
    6. int num2 = 20;
    7. //调用swap函数
    8. cout << "较大的值为:" << swap(num1, num2) << endl;
    9. system("pause");
    10. return 0;
    11. }
    12. -----------------------------------------------------------
    13. 输出结果:
    14. 较大的值为:20

    4, 默认参数

    通过数据类型 函数名(形参x=值x)的方式, 可以给函数定义默认参数

    1. #include
    2. #include
    3. using namespace std;
    4. //定义默认参数
    5. int func(int a = 10, int b = 20)
    6. {
    7. return a + b;
    8. }
    9. int main()
    10. {
    11. cout << func() << endl;
    12. system("pause");
    13. return 0;
    14. }
    15. ------------------------------------------------
    16. 输出结果:
    17. 30

    注意:

    1, 若函数声明中定义了默认参数, 则函数定义中不能再次定义默认参数

    1. int func(int a = 10, int b = 20);
    2. //编译时会报错, 因为默认参数已经在声明中定义,不能再次定义
    3. int func(int a = 10, int b = 20)
    4. {
    5. return a + b;
    6. }

    2, 从默认参数开始, 往后的参数都必须是默认参数

    5, 占为参数

    通过数据类型 函数名(数据类型1, 数据类型n=值)的方式, 可定义占为参数, 占位参数只写数据类型和值, 不用写参数名

    1. #include
    2. #include
    3. using namespace std;
    4. //下面定义了一个int类型的占为参数
    5. void func(int a = 10, int=20)
    6. {
    7. cout << "调用了一个有占位参数的函数!!!" << endl;
    8. }
    9. int main()
    10. {
    11. //注意:占位参数必须要显示传入
    12. func();
    13. system("pause");
    14. return 0;
    15. }
    16. ------------------------------------------------------
    17. 输出结果:
    18. 调用了一个有占位参数的函数!!!

    6, 函数重载

    函数名称相同, 形参个数不同,名称不同, 顺序不同可以实现函数重载, 需要在同一个作用域

    6-1, 参数个数不同重载

    根据传入参数个数不同, 选择相应的函数进行调用

    1. #include
    2. #include
    3. using namespace std;
    4. void func()
    5. {
    6. cout << "调用func!!!" << endl;
    7. }
    8. void func(int a)
    9. {
    10. cout << "func(int a)!!!" << endl;
    11. }
    12. int main()
    13. {
    14. //因为传入了参数, 所以会调用func(int a)
    15. func(10);
    16. system("pause");
    17. return 0;
    18. }
    19. ----------------------------------------------------
    20. 输出结果:
    21. func(int a)!!!

    6-2, 参数类型不同重载

    根据传入参数类型不同, 选择相应的函数进行调用

    1. #include
    2. #include
    3. using namespace std;
    4. void func(int a)
    5. {
    6. cout << "调用func(int a)!!!" << endl;
    7. }
    8. void func(double b)
    9. {
    10. cout << "func(int b)!!!" << endl;
    11. }
    12. int main()
    13. {
    14. double b=20;
    15. //形参类型不同,进行函数重载
    16. func(b);
    17. system("pause");
    18. return 0;
    19. }
    20. -------------------------------------------
    21. 输出结果:
    22. func(int b)!!!

    6-3, 参数顺序不同重载

    根据传入参数顺序不同(注意:参数需要不同的数据类型), 选择相应的函数进行调用

    1. #include
    2. #include
    3. using namespace std;
    4. void func(int a, double b, int c)
    5. {
    6. cout << "调用int a, double b)!!!" << endl;
    7. }
    8. void func(double b, int a, int c)
    9. {
    10. cout << "func(double a, int b)!!!" << endl;
    11. }
    12. int main()
    13. {
    14. int a = 10;
    15. double b = 20;
    16. int c = 100;
    17. //参数顺序不同,进行函数重载
    18. func(b, a, c);
    19. system("pause");
    20. return 0;
    21. }
    22. ---------------------------------------------
    23. 输出结果:
    24. func(double a, int b)!!!

    说明:函数的返回值不可以作为函数重载的条件

    6-4, 引用做函数重载

    const引用需要传入具体值才会调用普通引用直接传递变量

    1. #include
    2. #include
    3. using namespace std;
    4. //函数调用时, 只需传入变量
    5. void func(int &a)
    6. {
    7. cout << "调用func(int &a)!!!" << endl;
    8. }
    9. //函数调用时, 需要传入具体的值,而不是变量
    10. void func(const int &a)
    11. {
    12. cout << "调用func(const int &a)!!!" << endl;
    13. }
    14. int main()
    15. {
    16. int a = 10;
    17. const int& b = a;
    18. //这里会调用func(int &a)
    19. //因为调用func(int &a)时, 相当于int &a = a, 合法操作
    20. func(a);
    21. cout << "-----------------------" << endl;
    22. //若这里会调用func(int &a), 相当于int &a = 10, 不合法操作
    23. // 所以调用的是func(const int &a)
    24. func(10);
    25. system("pause");
    26. return 0;
    27. }
    28. -------------------------------------------------------------
    29. 输出结果:
    30. 调用func(int &a)!!!
    31. -----------------------
    32. 调用func(const int &a)!!!

  • 相关阅读:
    记录:CentOS安装配置MySQL8
    linux权限
    【JavaScript-函数】函数是什么?一文搞懂js当中的函数,
    看着别人月入过万,30岁想转入做软件测试,有什么难度?
    Vue3中使用Pinia
    【Mycat2实战】三、Mycat实现读写分离
    mysql安装_win版
    【学习】手写数字生成
    NumPy 1.26 中文文档翻译完成
    Use the OverlayFS storage driver
  • 原文地址:https://blog.csdn.net/qq_25500415/article/details/134192675