zoukankan      html  css  js  c++  java
  • 重载

    重载定义:同一标识符在不同的上下文中有不同的意义。

    重载函数定义: 用同一个函数名定义不同的函数,函数名和不同函数参数搭配时函数有不同的含义。

    #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 main(int argc, char *argv[])
    {
        printf("%d
    ", func(3));               // 3
        printf("%d
    ", func(4, 5));            // 9
        printf("%d
    ", func("D.T.Software"));  // 12
        
        return 0;
    }

    函数重载条件:(至少满足下面一个条件)

        1.参数个数不同

        2.参数类型不同

        3.参数顺序不同

    //函数重载遇上函数默认参数
    #include <stdio.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 = func(1, 2);    // 编译出错 func(int,int)目标函数不明确
        
        return 0;
    }
    // C++引入太多特性,而特性又是冲突的

    函数重载准则:

          1.将所有的同名函数作为候选函数,在候选函数进行参数匹配

          2.匹配成功:可以精确匹配每个参数

                通过默认参数可以匹配参数

                通过类型转换可以匹配参数

          3.匹配失败:可以同时匹配多个函数。

                无法匹配任何一个函数。

    注意:

       1. 重载函数本质上时不同的函数,有不同的内粗地址。

       2. 重载函数的函数类型不同。

       3. 函数返回值不可以作为重载判断条件。

       4. 重载用函数名和参数列表决定。

    #include <stdio.h>
    
    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);        //address1
        printf("%p
    ", (int(*)(int, int, int))add);   //address2
    
        return 0;
    }

    函数重载与函数指针

        将函数指针赋值给函数重载时:

        1. 选函数指针参数与候选者函数参数列表一样。

        2. 选函数指针返回值与候选者函数参数返回值一样(函数类型一样)。

    #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);
    }
    
    typedef int(*PFUNC)(int a);
    
    int main(int argc, char *argv[])
    {
        int c = 0;
        PFUNC p = func;      
        c = p(1);      
        printf("c = %d
    ", c);
        return 0;
    }

    注意:

      1. 函数重载必须发送在同一作用域(全局作用域,类作用域)。

      2. 无法通过函数名得到重载函数入口地址,函数名和参数列表共同决定函数入口地址。

  • 相关阅读:
    Apache Hive (三)Hive元数据信息对应MySQL数据库表
    Apache Hive (二)Hive安装
    Apache Hive (一)Hive初识
    C#使用NPOI导出excel设置单元格背景颜色
    Spark之 Spark Streaming整合kafka(并演示reduceByKeyAndWindow、updateStateByKey算子使用)
    Spark之 Spark Streaming流式处理
    Apache Flume的介绍安装及简单案例
    Kafka如何保证数据不丢失
    Ajax
    HttpComponents
  • 原文地址:https://www.cnblogs.com/zsy12138/p/10685090.html
Copyright © 2011-2022 走看看