函数重载和函数指针
int func(int a,int b)
{
cout<<"func"<<endl;
return 0;
}
int func(int a,int b,int c)
{
cout<<"func(int,int,int)"<<endl;
return 0;
}
//1.定义一种函数类型
typedef int(MY_FUNC)(int ,int); //定义MY_FUNC的函数类型,返回值是int,参数列表是int
//2.定义指向这种函数类型的指针类型
typedef int(*MY_FUNC_P)(int,int);
int main(void)
{
//1.
MY_FUNC *fp=NULL;
fp=func;
fp(10,20);
//2.
MY_FUNC_P fp = NULL;
fp=func;
fp(10,20);
//3.
int(*fp1)(int,int)=NULL; //常用 (在这一步已经发生重载)
fp1=func; //若有对func()函数重载,fp1->func(int,int)函数(参数类型个数匹配)
fp1(10,30);
fp1(10,30,20) //错误,fp1已经是指向了func(int,int)函数
//三个参数的函数同理
}
在给函数指针赋值的时候,发生函数重载匹配
在调用函数指针的时候,所调用的函数已经固定
所以函数重载与函数类型的函数重载主要区别在于,一般的函数重载发生在函数调用的时候
而函数类型的函数重载发生在给函数指针赋值的时候
//指向函数类型指针的格式
返回值类型(*指针名)(参数列表)=NULL;
如:int(*fp)(int,int)=NULL;
//自定义函数类型
typedef int(MY_FUNC)(int ,int);
同样,返回值类型(函数类型名)(参数列表)