同一个函数名定义不同函数
函数搭配的参数不同,函数的意义也不同
函数重载是由函数名和参数列表决定的
函数重载至少要满足这些条件
参数个数不同
参数类型不同
参数顺序不同
/*********************************参数不同********************/
#include <stdio.h>
int func(int x)
{
return x;
}
int func(int x,int y)
{
return x+y;
}
int main() //两个函数参数个数不同
{
printf("%d\n",func(1));
}
/*将第二个定义参数赋初值编译器就无法识别两个func函数,出现二义性*/
#include <stdio.h>
int func(int x)
{
return x;
}
int func(int x,int y=1)
{
return x+y;
}
int main()
{
printf("%d\n",func(1)); //编译器无法区分两个函数的区别
}
/***************************顺序不同************************/
#include <stdio.h>
int func(int x,char y)
{
return x;
}
int func(char x,int y)
{
return x;
}
int main()
{
printf("%d\n",func(1,'1')); // 1
printf("%d\n",func('1',1)); // 49(字符1的十进制)
}
/*************************返回值无法法作为重载的依据**********************/
#include <stdio.h>
int func(int x,char y)
{
return x;
}
char func(int x,char y)
{
return y;
}
int main()
{
//编译无法通过 两个函数的函数名相同,参数列表相同,返回值无法作为重载的依据
}
1.无法通过函数名直接获取函数的入口地址
2.函数重载要发生在同一个作用域
3.将重载函数名赋值给函数指针时 函数类型和函数指针类型要一致(包括返回值 参数列表)
/*
*将重载函数名赋值给函数指针时 函数类型和函数指针类型要一致(包括返回值 参数列表)
*/
#include <stdio.h>
typedef int(*PFUNC)(int x); //int(int)
int func(int x) //int(int,int)
{
return x;
}
int main()
{
PFUNC p =func;
printf("%d",p(1));
}
/*****参数列表相同,返回值不同************/
#include <stdio.h>
typedef int(*PFUNC)(int x); //int(int)
char func(int x) //char(int)
{
return x;
}
int main()
{
PFUNC p =func;//错误 重载函数和指针参数列表相同,返回值不同
}