1. 程式人生 > >函式指標指向多個函式

函式指標指向多個函式

轉載於: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]))();