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

    return 0;
}

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

猜你喜欢

转载自www.cnblogs.com/huangdengtao/p/11785347.html