精華區beta Programming 關於我們 聯絡資訊
==> 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]