函式指標指向多個函式
轉載於:HTTPS://blog.csdn.net/wenpinglaoyao/article/details/79154086
為了簡化,關於類的名稱就叫甲吧,先定義一個類的標頭檔案,如下所示:
#include <iostream>
using namespace std;
A類
{
public:
A(int n);
〜A();
/ *就是下面我們的類函式指標的宣告
首先,眾所周知函式指標的宣告前面要用圓括號括起來,
而類函式指標在前面還要加一個類名與域操作符【
表示這種函式指標只能指向這個類中的某些函式;
中括號和3表示這是一個函式指標陣列,最後那個圓括號
表示引數列表,要和被指向的函式引數列表一致才行* /
void(A: :* pfun [3])();
void show(int i); //之所以加上這個函式,是為了展示【 - > *】的用法
私有:
void fun1(); //第一個函式指數要指向的函式;
void fun2(); //同上,是第二個
void fun3(); //第三個
};
然後是我們的CPP檔案定義:
#include“啊”
A :: A()
{
/ *類函式指標的賦值要嚴格如下所示前面
的【&】與類域操作符都是必不可少的* /
pfun [0] =&A :: FUN1;
pfun [1] =&A :: fun2;
pfun [2] =&A :: fun3;
/ *下面這個就是非法的* /
// pfun [2] = A ::&fun3;
}
void A :: show(int i)
{
if(i <3)
(this - > * pfun [i])(); //這裡必須要加上這個,因為【 - > *】是一個操作符,前面必須要有物件
}
void A :: fun1()
{
cout <<“fun1:hello world!” << endl;
}
void A :: fun2()
{
cout <<“fun2:我是小彪。” << endl;
}
void A :: fun3()
{
cout <<“fun3:謝謝你的閱讀!”<< endl;
最後是我們的原始檔定義:
#include“啊”
int main()
{
A a;
for(int i = 0; i <3; i ++)//這個是錯誤的使用方式,編譯器不會報錯
a.pfun [i];
cout <<“上面顯示內容了嗎?沒有吧,這是因為我們使用了錯誤的方式,下面的才是正解!”<< endl;
for(int i = 0; i <3; i ++)//這個才是正確的使用方式
(a。*(a.pfun [i]))();
a.show(2);
返回0;
}
其中在原始檔中,注意看第9行程式碼,那個【。*】實際上是一個操作符,它倆的出現意味著要呼叫類函式指標了(您可以試著在它倆中間加一個空格什麼的,相信編譯器會報錯);而且這行出現了兩個一,第一個一個是配合使用的呼叫物件,而後面那個一個意思是使用這個物件裡面的函式指標值【 *。】;也許我說的有點暈,如果讀者朋友有心,可以建立兩個甲物件X和Y,然後讓X和ý的函式指標數組裡面的值不一樣,比如X裡面的pfun [0]指向的是FUN1函式,而y裡面的pfun [0]指向的卻是fun3函式,然後用這樣的程式碼
(x。*(y.pfun [i]))();