• C++入门学习(3)函数重载


    上期回顾

            在上回,我们学习了缺省参数,了解了缺省参数是为了解决C语言中的形参没有缺省值的情况,还学会了如何使用缺省参数和缺省参数的使用规则,比如在函数调用的时候,我们传入形参必须从左往右依次传入,在形参给缺省值的时候,必须从右往左依次给等等。那今天我们也要继续努力呀!接下来就让我们进入今天的学习----函数重载。

    一、函数重载的诞生背景

            我们还是先解释一下函数重载是什么意思?


            所谓“重载”就相当于我们的一词多义,我们可以通过上下文的语境来判断这个词的意思,这样的词就是被“重载”了,所以我们的函数重载也不例外,函数名相同,但是表达的意思却不同,那函数重载产生的背景是什么呢?

    我们来看下面这段错误代码:(C语言中的重名)

    1. #include
    2. int Add(int x,int y)
    3. {
    4. return x + y;
    5. }
    6. double Add(double x,double y)
    7. {
    8. return x + y;
    9. }
    10. int main()
    11. {
    12. return 0;
    13. }

    再看正确的写法:(解决C语言的重名)

    1. #include
    2. int Add1(int x,int y)
    3. {
    4. return x + y;
    5. }
    6. double Add2(double x,double y)
    7. {
    8. return x + y;
    9. }
    10. int main()
    11. {
    12. return 0;
    13. }

            其实在我们C语言中,函数在运用的时候,是不允许重名的,当函数重名的时候,我们的编辑器是无法分辨哪个才是这个函数,就会报错。(至于为什么不允许,作者会加快速度出一篇博客专门讲解一下,我们现在可以暂时不考虑)

            我们就必须写Add1和Add2才可以解决问题,这样其实给人的感觉很乱,所以在C++这里就允许函数的重名定义,但是在C++里又是怎么区分的呢?

            接下来就让我们来展开对函数重载的学习吧!

    二、函数重载的定义

    函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题

    所以在C++中我们可以这样解决:

    1. #include
    2. int Add(int x,int y)
    3. {
    4. return x + y;
    5. }
    6. double Add(double x,double y)
    7. {
    8. return x + y;
    9. }
    10. int main()
    11. {
    12. Add(1,2);
    13. Add(1.1,2.2);
    14. return 0;
    15. }

    在了解定义之后,我们会看到在C++里是根据同名函数的形参列表中的参数个数不同、参数类型不同和参数的类型顺序不同来区分同名函数的,所以这也就给函数重载的分类提供了种类。

    三、函数重载的分类

    3.1 函数形参的参数个数不同

    当我们的形参的参数个数不同时,可以构成函数重载

    1. #include
    2. int Add(int x,int y,int z)
    3. {
    4. return x + y + z;
    5. }
    6. int Add(int x,int y)
    7. {
    8. return x + y;
    9. }
    10. int main()
    11. {
    12. Add(1,2);
    13. Add(1,2,3);
    14. return 0;
    15. }

    3.2 函数形参的参数类型不同

    当我们的形参的参数类型不同时,可以构成函数重载

    1. int Add(int x,int y)
    2. {
    3. return x + y;
    4. }
    5. double Add(double x,double y)
    6. {
    7. return x + y;
    8. }
    9. int main()
    10. {
    11. Add(1,2);
    12. Add(1.1,2.2);
    13. return 0;
    14. }

    3.3 函数形参的参数类型的顺序不同

    当我们的形参的参数类型的顺序不同时,可以构成函数重载

    1. #include
    2. using namespace std;
    3. void Print(int x,char y)
    4. {
    5. cout << x << y << endl;
    6. }
    7. void Print(char x,int y)
    8. {
    9. cout << x << y << endl;
    10. }
    11. int main()
    12. {
    13. Print('a',1);
    14. Print(1,'a');
    15. return 0;
    16. }

    四、函数重载和缺省参数

    那我们的函数重载和缺省参数是否可以一起用呢?我们来看下面的代码:

    我们的确构成重载,但是在我们没有传参数的时候,就不对了,编辑器不知道,你要调用的是哪一个函数,所以在函数重载和缺省参数都存在的时候,一定不要不传参!

    1. #include
    2. using namespace std;
    3. // 构成重载,不传参数的时候调用存在二义性
    4. void f()
    5. {
    6. cout << "f()" << endl;
    7. }
    8. void f(int a = 0)
    9. {
    10. cout << "f(int a)" << endl;
    11. }
    12. int main()
    13. {
    14. f();
    15. return 0;
    16. }

  • 相关阅读:
    宝塔node建立软连接,解决command not found问题
    Dijkstra与Bellman-Ford算法对比
    洛谷基础题练习2
    单元测试及其工具Junit
    入门数据库Days7
    docker-desktop启动k8s
    (一)逻辑回归及其代价函数 --- 吴恩达深度学习笔记
    FAN7391MX 高压600V 用于高压、高速驱动 MOSFET和IGBT 半桥栅极驱动器IC
    如何设置Linux的语言环境
    dotnet 用 SourceGenerator 源代码生成技术实现中文编程语言
  • 原文地址:https://blog.csdn.net/2302_76941579/article/details/134245961