C++-------定義函數類型


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM