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