今天我所講的是不通過修改乙個class的成員,就能夠追蹤其成員。方法就是類似c語言中的函式指標,
比如:int (*foo)(int arg),記住要和另乙個指標函式區分開來,類似這樣:int *foo(int arg).
比如我們可以這樣宣告乙個變數和函式:
int (*pfun)(int arg)=0如果我們想利用函式指標操作函式,就和指標變數使用一樣:;int fun(int arg); //
這個函式實現隨便啦,我就不寫了。
pfun=fun;對,很雞肋也沒必要。這是當然,因為我們沒用在對的地方。下面我要講的是利用乙個類去call back另乙個無關類的成員。int result=(*pfun)(123);
**:
1 #include 2第33行把class a的成員函式位址傳給了functor的函式指標,從而能夠通過functor的成員處理a中的成員。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
這裡用到了對operator()的過載,可以換成別的函式處理functor的函式指標
(不處理也行,但是函式指標很繞人,不直觀),像這樣:
view code
1 #include 2c++確實複雜,但是我們如果利用好,複雜就是強大。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 除錯追蹤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...