由淺入深講解動態類函式指標

2021-10-04 02:40:38 字數 2381 閱讀 6024

1、首先描述一下指標值的含義: 

假設記憶體值的序列是這樣描述的 : 我們定義乙個 0 ~ 50 的正整數序列。

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,1,0,0,8,0,0,

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0

它第15號數值是 1,第18號數值是8。

由此,我們可以想象 「序號15」 就是指標,指標的值就是 「序號15位置上描述了乙個變數1」。

為了方便表示:我們定義變數 x 的位置就在 「序號15」上,y序號的位置就在」序號18」上。

所以其值相加:x + y = 1 + 8 = 9;

為了刻意記錄這些序號位置,我們又建立了一張表專門記錄這些序號,它的描述方式假設是這樣的:

」描述這些變數的值」用

」n(x)

」來表式, 「&

」表示向上取這些值的序號位置 )

&n0  ,&n1  ,&n2  ,&n3  ,&n4  ,&n5  ,&n6  ,&n7  ,&n8  ,&n9 ,

&n10,&n11,&n12,&n13,&n14,&n15,&n16,&n17,&n18,&n19,

&n20,&n21,&n22,&n23,&n24,&n25,&n26,&n27,&n28,&n29,

&n30,&n31,&n32,&n33,&n34,&n35,&n36,&n37,&n38,&n39,

&n40,&n41,&n42,&n43,&n44,&n45,&n46,&n47,&n48,&n49

「序號15」位置上描述了乙個變數1,我們可以理解成,記錄 「序號15值」的變數是1,其變數名是」n15」,記錄n15的位置是」&n15」(第15號位址);

因 」&表示獲取序號」 ,那麼它的反作用 」*表示取序號下的值」所以:

*(&n15) = n15 = 1;

擴充套件理解【假設: *n15 = *(&1); (這裡是把n15 的值當做乙個位址來使用,它表示第1號位址的值)】

//例子1 執行基本例項 (動態函式指標的傳遞)

class t_object

virtual ~t_object()

int func(void* p)

};void main()

}

將動態函式指標賦予 _pfunc 作為載體,它需要 t 物件完成例項化執行。

執行方法如下:

step = (t.*_pfunc)(&step); 

step = t.func(&step);

這兩個等式表達方式是一樣的。

(關於用途舉例:可以在主類不採用多型的方式承載多套實現的方法,這裡引用敲門磚,希望大家能夠舉一反三)

//例子2 動態函式指標的應用

class t_object

virtual ~t_object()

int func(void* p)

//new coode begin

int func1(void* p)

int func2(void* p)

//new coode end

};void main()

}

以上呼叫僅表示它最基本的原始**展現,方便認知閱讀:

(為了提高閱讀使用性,下面我們開始優化變型操作)

將函式式包含在內,使呼叫方更易理解及呼叫;

//例子3 函式指標作為引數傳遞

class t_object

virtual ~t_object()

int func(void* p)

void addfunc(int(t_object::* pfunc)(void*))

int do(int step)

return step;

} int(t_object::* m_pfunc)(void*);

};void main()

}

根據此方法,可以動態的實施類函式的呼叫。

將函式指標式再簡化,函式指標作為命名型別引數傳遞:

//例子 4 函式指標作為命名型別引數傳遞

class t_object

virtual ~t_object()

int func(void* p)

void addfunc(pfunc pfunc)

int do(int step)

return step;

} pfunc m_pfunc;};

void main()

}

以上是關於類函式傳參的呼叫方式,可以通過該方法實現很多功能,內容太多本次就不一一舉例了。

類函式指標和普通函式指標

我們都看慣了一般的函式指標,但是關於類的函式指標又是怎樣的呢?它的靜態函式指標和非靜態函式指標是一樣的麼?cpp view plain copy font size 18px include using namespace std typedef int pmax int,int 普通函式指標 in...

類成員函式指標

類成員函式指標 類的成員函式分為兩種,一種是靜態函式,另外一種是非靜態函式。例如 class x display 為靜態函式,getvalue即為非靜態函式。兩種函式在使用的時候是不一樣的。靜態函式可以直接由類名來呼叫,而非靜態函式則必須通過某乙個物件來呼叫,例如 x display x x x.g...

類成員函式指標

類成員函式指標的基本用法 1。宣告 已知簡單的類宣告如下 class screen screen public screen forword int num 1 我們可以這樣宣告乙個指向back成員函式的指標 screen screen back fun int para screen back 其...