精華區beta Programming 關於我們 聯絡資訊
※ 引述《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