==> rtyu.bbs@bbs.csie.ncu.edu.tw (rtyu) 提到:
> > 想太多了,
> > 那只是讓這個 function symbol 只出現在它所存在的編譯單元內,
> > 意思就是說其它編譯單元不能使用這個 function。
> 看成static void* funct(){... }
> 看錯了..
如果static void* function() 是放在 class的 declartion中,那意義又跟
上頭所指的含意有所差別,這時就可以把function視為一個屬於此class 但又可以
獨立於此class的之外可以使用函式...或者說是變成一個屬於此class的global函式...
另外如果有函式必須要傳入一個class的某個函式指標,則這個被傳入的函式也
必須要宣告為static才行..
舉一個例子 假設我有一個class要處理圖檔的讀寫我可以這麼做
class CImage
{
private:
CImage();
public:
static CImage* LoadImage(const char* ImageFile);
}
之後要產生圖檔時,就可以用下列
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的人也比較容易使用,不會用錯
當然static的作用不止於此,還有許多優點需要自己去體會..
--
☆ [Origin:椰林風情] [From: 203-204-128-247.adsl.static] [Login: **] [Post: 98]