• C++函数的升级下_5


    一。重载(Overload)

      1.同一个标识符在不同的上下文有不同的意义

      如:“洗”不同的含义

        - 洗衣服、洗脸、洗脑

      如:“play”和不同的单词搭配后不同的含义

        -play chess, play piano

      2.函数重载(Function Overload)

        a.用同一个函数名定义不同的函数

        b.当函数名和不同的参数搭配时函数的含义不同

          int func(int x)

          int func (int a, int b )

          int func(const char* s )

      3.函数重载至少满足下面一个条件

        a。参数个数不同

        b. 参数类型不同

        c。参数顺序不同

    #include <stdio.h>
    #include <string.h>
    
    int func(int x)
    {
        return x;
    }
    
    int func(int a, int b)
    {
        return a + b;
    }
    
    int func(const char* s)
    {
        return strlen(s);
    }
    
    int func(int a, const char* s)
    {
        return a;
    }
    
    int func(const char* s, int a)
    {
        return strlen(s);
    }
    
    int main(int argc, char *argv[])
    {
        int c = 0;
        
        c = func("ab", 1);
        
        printf("c = %d
    ", c);
        
        printf("Press enter to continue ...");
        getchar();    
        return 0;
    }

      4.函数默认参数遇上函数重载会发生什么?

    #include <stdio.h>
    #include <string.h>
    
    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 argc, char *argv[])
    {
        int c = 0;
        
        c = func(1, 2); // 存在二义性,调用失败,编译不能通过 
        
        printf("c = %d
    ", c);
        
        printf("Press enter to continue ...");
        getchar();    
        return 0;
    }

    5.编译器调用重载函数的准则

      a.将所有同名函数作为候选者

      b.尝试寻找可行的候选函数

        #精确匹配实参

        #通过默认参数能够匹配实参

        #通过默认类型转换匹配实参

      c.匹配失败

        #最终寻找到的可行候选函数不唯一,若出现二义性,编译失败

        #无法匹配所有的候选者,函数未定义,编译失败。

    6.函数重载的注意事项

      #重载函数在本质上是相互独立的不同函数

      #重载函数的类型是不同的

      #函数返回值不能作为函数重载的依据

    7.下面程序中哪个函数将被调用

      

    #include <stdio.h>
    #include <string.h>
    
    int func(int x) // int(int a)
    {
        return x;
    }
    
    int func(int a, int b)
    {
        return a + b;
    }
    
    int func(const char* s)
    {
        return strlen(s);
    }
    
    typedef int(*PFUNC)(int a); // int(int a)
    
    int main(int argc, char *argv[])
    {
        int c = 0;
        PFUNC p = func;
        
        c = p(1);
        
        printf("c = %d
    ", c);
        
        printf("Press enter to continue ...");
        getchar();    
        return 0;
    }

      输出结果C = 1

    7.函数重载与函数指针

      #当使用重载函数名与函数指针进行幅值时

        a.根据重载规则挑选与函数指针参数列表一致的候选者

        b.严格匹配候选者的函数类型和函数指针的函数类型

    二。C++和C的相互调用

      1.在项目中融合C++和C代码是实际工程中不可避免的

      2.虽然C++编译器能够兼容C语言的编译方式,但C++编译器会优先使用C++的方式进行编译。

      3.利用extern关键字强制让C++编译器对代码进行C方式编译

       例:  extern"include"add.h""|

    三。小结

      1.函数重载是C++对C语言的一个重要升级

      2.函数重载通过函数参数列表区分不同的同名函数

      3.函数的返回值类型不是函数重载的依据

      4.extern关键的关键是能够实现C和C++的相互调用。

  • 相关阅读:
    poi生成excel整理(设置边框/字体/颜色/加粗/居中/)
    java里poi操作Excel工具类【我改】
    java里poi操作excel的工具类(兼容各版本)
    在java poi导入Excel通用工具类示例详解
    layui给select下拉框赋值
    Unity3d开发wp8问题汇总
    Unity3D WP8发布解决方案名 DefaultPackageName 修改问题
    微软发布WP SDK8.0 新增语音、应用内支付等原生API
    unity3d android互调
    解决unity3d发布的网页游戏放到服务器上无法使用的问题
  • 原文地址:https://www.cnblogs.com/lvxiaoning/p/7504378.html
Copyright © 2020-2023  润新知