• 函数重载分析


    重载(Overload)
    同一个标识符在不同的上下文中有不同的意义
    如:
      "洗"和不同的词搭配后有不同的含义
      洗衣服,洗脸,洗脑,洗马桶
      "play"和不同的单词搭配后会有不同的含义
       play chess, play piano, play basketball

    重载在自然语言中是随处可见的,那么程序设计中是否也有重载呢?

    C++中的函数重载
    函数重载(Function Overload)
    -用同一个函数名定义不同的函数
    -当函数名和不同的参数搭配时函数的含义不同
    int func(int x)
    {
      return x;
    }

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

    int func(const char* s)
    {
      return strlen(s);
    }


    冲突1:当函数默认参数遇上函数重载会发生什么?
    int func(int a, int b, int c=0)
    {
      return a*b*c;
    }

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

    int main()
    {
    int c = func(1,2)
      return 0;
    }

    编译器调用重载函数的准则
    -将所有同名函数作为候选者
    -尝试寻找可行的候选函数
    精确匹配参数
    通过默认参数能够匹配实参
    通过默认类型转换匹配实参

    匹配失败
    最终寻找到的候选函数不唯一,则出现二义性,编译失败
    无法匹配所有候选者,函数未定义,编译失败

    函数重载的注意事项
    -重载函数在本质上是相互独立的不同函数
    -重载函数的函数类型不同
    -函数返回值不能作为函数重载的依据

    函数重载是由函数名和参数列表决定的。

    int add(int a, int b) //函数类型为int(int,int)
    {
        return a+b;
    }
    
    int add(int a, int b, int c) //函数的类型为int(int,int,int)
    {
        return a+b+c;
    }
    
    int main()
    {
        printf("%p
    ",(int(*)(int,int))add);
        printf("%p
    ",((int*)(int,int,int)add));
    }

    小结:
    函数重载是C++中引入的概念
    函数重载用于模拟自然语言中的词汇搭配
    函数重载使得C++具有更丰富的语义表达能力
    函数重载的本质为相互独立的不同函数
    C++中通过函数名和函数参数确定函数调用

  • 相关阅读:
    计算小于12的阶乘
    ubuntu下gvim启动出现gtk warning Invalid input string
    UBUNTU基础知识
    Ubuntu下创建软链接
    linux命令行介绍及使用(二)
    Ubuntu问题sudo: /etc/sudoers is mode 0640should be 0440的解决方法
    安装mp3插件
    Ubuntu下GTK的安装
    linux命令行介绍及使用(三)
    VB.NET中用GDI+画饼图
  • 原文地址:https://www.cnblogs.com/-glb/p/11886461.html
Copyright © 2020-2023  润新知