/********************************************\
|????歡迎轉(zhuǎn)載, 但請保留作者姓名和原文鏈接, 祝您進(jìn)步并共勉!???? |
\********************************************/
作者: Jerry Cat
時間: 2006/05/16
鏈接:?http://m.shnenglu.com/jerysun0818/archive/2006/05/16/7231.html
類成員函數(shù)指針的一點體悟
類的成員函數(shù)分為兩種,一種是靜態(tài)函數(shù),另外一種是非靜態(tài)函數(shù)。例如:
class X
{
public:
?static void display();
?bool getValue();
}
display()為靜態(tài)函數(shù),getValue即為非靜態(tài)函數(shù)。兩種函數(shù)在使用的時候是不一樣的。靜態(tài)函數(shù)
可以直接由類名來調(diào)用,而非靜態(tài)函數(shù)則必須通過某一個對象來調(diào)用,例如:
X::display();
X x;
x.getValue();
為什么會出現(xiàn)這樣的情況了?這是由于編譯器在處理這兩種函數(shù)的方式不同造成的。靜態(tài)函數(shù)在
運行期只有一份拷貝,所有該類生成的對象共享該函數(shù)以及該函數(shù)的內(nèi)部變量。而對于非靜態(tài)函數(shù),
不同的對象擁有自己的內(nèi)部變量。
在使用類成員函數(shù)指針的時候同樣也會不同。
靜態(tài)成員函數(shù)可以當(dāng)作全局函數(shù)來調(diào)用。
可以定義以下函數(shù)指針:
typedef void (*pf)();
pf p=X::display;
(*p)();? //或p();
也可以當(dāng)作參數(shù)傳遞到全局函數(shù)里:
void Display(pf p)
{
?(*p)();
//或p();
}
Display(X::display);
如果是非靜態(tài)成員函數(shù),其函數(shù)指針則是另一種寫法:
typedef void (X::*pf2)();
這一類指針只能用于本類之內(nèi)。
posted on 2006-05-16 00:12
Jerry Cat 閱讀(1172)
評論(2) 編輯 收藏 引用