重载的概念

重载

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

函数重载

同一个函数名定义不同的函数

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

例:

#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\n",func(1));
    printf("%d\n",func(1,2));
    printf("%d\n",func("zhang"));
   
    return 0;
}

输出:

1
3
5

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

参数个数不同
参数类型不同
参数顺序不同

#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[])
{
    printf("%d\n",func(1,2));
    return 0;
}

输出:
错误
Slide10.PNG
Slide11.PNG

C++中的函数重载

函数重载的注意事项

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

重载函数的函数类型不同

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

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

#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);
    printf("%p\n", (int(*)(int, int, int))add);

    return 0;
}

Slide13.PNG


YingLi
6 声望4 粉丝

From zero to hero.