※ 引述《Landa.bbs@bbs.ntu.edu.tw (...蠹書蟲...)》之銘言:
> ==> rtyu.bbs@bbs.csie.ncu.edu.tw (rtyu) 提到:
> > 看成static void* funct(){... }
> > 看錯了..
> 如果static void* function() 是放在 class的 declartion中,那意義又跟
> 上頭所指的含意有所差別,這時就可以把function視為一個屬於此class 但又可以
> 獨立於此class的之外可以使用函式...或者說是變成一個屬於此class的global函式...
> 另外如果有函式必須要傳入一個class的某個函式指標,則這個被傳入的函式也
> 必須要宣告為static才行..
不用...
class A{
public:
int num;
A(void){
num = 10;
}
void print(void){
cout<<num<<endl;
}
};
int main(void){
A a;
void (A::*f)(void) = &A::print;
(a.*f)();
return 0;
}
> 舉一個例子 假設我有一個class要處理圖檔的讀寫我可以這麼做
> class CImage
> {
> private:
> CImage();
> public:
> static CImage* LoadImage(const char* ImageFile);
> }
這個例子倒是和member function pointer沒有關係
> 之後要產生圖檔時,就可以用下列
> CImage* pImage = CImage::LoadImage(file);
> 來取代
> CImage* pNew = new CImage;
> bool bLoadOK= pNew->Load(file);
> if(!bLoadOK) delete pNew;
> 好處是把 new 包在 LoadImage() 中,不需要在外界 new
> 然後沒有 load成功的話 直接在LoadImage()中處理,並傳回null
> 程式會變得清楚簡潔..使用此class的人也比較容易使用,不會用錯
其實沒什麼很大的差別
上下兩種方法同樣都要對load失敗時作處理
只是前面少了檢查pImage是否為NULL的部分
> 當然static的作用不止於此,還有許多優點需要自己去體會..
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: tsugumi.m3.ntu.edu.tw