歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++指向類成員函數的指針

C++指向類成員函數的指針

日期:2017/3/1 10:01:02   编辑:Linux編程

最近在開發中用到了函數指針,於是想整理了一下有關函數指針的概念。O(∩_∩)O~

首先 函數指針是指向一組同類型的函數的指針;而類成員函數我們也可以相似的認為,它是指向同類中同一組類型的成員函數的指針,當然這裡的成員函數更准確的講應該是指非靜態的成員函數。前者是直接指向函數地址的,而後者我們從字面上也可以知道 它肯定是跟類和對象有著關系的。

C++函數指針實例:

typedef int (*p)(int,int);//定義一個接受兩個int型且返回int型變量的函數指針類型
int func(int x,int y)
{
printf("func:x=%d,y=%d/n",x,y);
return (x<y?x:y);
}

int main()
{
p fun=func;//定義函數指針並給它賦上一個函數指針
cout<<"min:"<<(*fun)(4,5)<<endl;//為什麼*fun需要用()擴起來呢?因為*的運算符優先級比()低,如果不用()就成了*(fun())
return 0;
}

而“指向類成員函數的指針”卻多了一個類的區別:

class A
{
public:
int func(int x,int y)
{
printf("A::func:x=%d,y=%d/n",x,y);
return (x<y?x:y);
}
};
typedef int (A::*p)(int,int);//指針名前一定要加上所屬類型類名 A::的限定

int main()
{
p fun=&A::func;
A a; //因為成員函數地址的解引用必須要附駐與某個對象的地址,所以我們必須創建某個對象。
cout<<"min:"<<(a.*fun)(4,5)<<endl;
return 0;
}

嘿嘿。。只是用起來 .* 感覺怪怪滴。

Copyright © Linux教程網 All Rights Reserved