• 第8课.函数重载分析(上)


    1.函数重载

    a.用同一个函数名定义不同的函数
    b.当函数名和不同的参数搭配函数的含义不同

        int func(int x)
        {
            return x;
        }
    
        int func(int a, int b)
        {
            return a + b;
        }
    
        int func(const char *s)
        {
            return strlen(s);
        }
    

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

    a.参数个数不同
    b.参数类型不同
    c.参数顺序不同

    3.当函数默认参数遇到函数重载会发生什么

        int func(int a,int b, int c = 0)
        {
            return a * b * c;
        }
        
        int func(int a, int b)
        {
            reutrn a + b;
        }
    
        int main()
        {
            int c = func(1, 2)        //which one?
            return 0;
        }
    

    不知道去调用那个函数

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

    5.函数重载的注意事项

    a.重载函数在本质上是相互独立不同函数(即函数是不同函数,只不过他们的名字恰好相同而已。函数的入口地址是不同的(下面证明),也跟加说明他们是互相独立的不同函数)
    b.重载函数的函数类型不同。(函数类型是由函数的返回类型和函数的参数类型一起构成)
    c.函数返回值不能作为函数重载的依据
    d.函数重载是由函数名参数列表共同决定的。(当然当遇到指针时还要考虑函数的返回类型,即使用函数类型来确定)

    #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);        //强制类型转换。(c语言中函数名就是函数的入口地址)
    	printf("%p
    ", (int(*)(int, int, int))add);
    
    	return 0;
    }
    

    两个函数的地址不同,意味着这两个add函数只是同名,是不同的函数

  • 相关阅读:
    VMware安装最新版CentOS7图文教程
    git 本地给远程仓库创建分支 三步法
    git如何利用分支进行多人开发
    题解 洛谷P6478 [NOI Online #2 提高组] 游戏
    题解 CF1146D Frog Jumping
    题解 洛谷P6477 [NOI Online #2 提高组] 子序列问题
    题解 LOJ2472 「九省联考 2018」IIIDX
    题解 CF1340 A,B,C Codeforces Round #637 (Div. 1)
    题解 LOJ3284 「USACO 2020 US Open Platinum」Exercise
    windows上的路由表
  • 原文地址:https://www.cnblogs.com/huangdengtao/p/11785347.html
Copyright © 2020-2023  润新知