第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函数只是同名,是不同的函数