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