追蹤class的成員變數

2022-07-24 04:15:09 字數 1389 閱讀 3431

今天我所講的是不通過修改乙個class的成員,就能夠追蹤其成員。方法就是類似c語言中的函式指標,

比如:int (*foo)(int arg),記住要和另乙個指標函式區分開來,類似這樣:int *foo(int arg).

比如我們可以這樣宣告乙個變數和函式:

int (*pfun)(int arg)=0

;int fun(int arg); //

這個函式實現隨便啦,我就不寫了。

如果我們想利用函式指標操作函式,就和指標變數使用一樣:

pfun=fun;

int result=(*pfun)(123);

對,很雞肋也沒必要。這是當然,因為我們沒用在對的地方。下面我要講的是利用乙個類去call back另乙個無關類的成員。

**:

1 #include 2

using

namespace

std;

3 template4

class

functor

11virtual n operator

()(n arg)

1215

private

:16 n (t::*mfun)(n arg);

17 t *mp;

18};

19classa22

int traced(int

b)23

27private:28

inta;

29};

30int

main()

31

第33行把class a的成員函式位址傳給了functor的函式指標,從而能夠通過functor的成員處理a中的成員。

這裡用到了對operator()的過載,可以換成別的函式處理functor的函式指標

(不處理也行,但是函式指標很繞人,不直觀),像這樣:

view code

1 #include 2

using

namespace

std;

3 template4

class

functor

11virtual n out(n arg) //

改動12

15private

:16 n (t::*mfun)(n arg);

17 t *mp;

18};

19classa22

int traced(int

b)23

27private:28

inta;

29};

30int

main()

31

c++確實複雜,但是我們如果利用好,複雜就是強大。

C 除錯追蹤class成員變數的方法

比如 int foo int arg 記住要和另乙個指標函式區分開來,類似這樣 int foo int arg 比如我們可以這樣宣告乙個變數和函式 複製 如下 int pfun int arg 0 int fun int arg 這個函式實現隨便啦,我就不寫了。如果我們想利用函式指標操作函式,就和指...

class中成員變數的初始化

在類class的定義中,不同定義方式的成員變數的初始化方式各不一樣。對於變數的初始化主要分以下幾種情況 1 普通變數 一般的成員變數的初始化不能在定義是進行初始化的,但此類資料成員是能夠在建構函式中進行初始化的,也能夠在初始化列表中進行初始化。使用建構函式定義方式如下 class test 使用初始...

class 私有變數

私有變數 只能在類的內部訪問的變數,無法在外部訪問 實現私有變數的方式 class a showx console.log a.x abc console.log a.showx abc優點 簡單 快捷 缺點 可以通過 for in 訪問到 class b let b new b instanceb...