函數重載和函數指針 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); 同樣,返回值類型(函數類型名)(參數列表)