2010-07-05 67 views

回答

5

靜態成員函數只是普通的(非成員)函數。你知道普通功能對你有什麼好處嗎?所以,出於同樣的原因,靜態成員函數對於相同的事情是有好處的。

只是有時一個普通的函數與類有緊密的關係,所以把它聲明爲類的靜態成員是有意義的,而不是聲明它是一個完全獨立的獨立函數。它可以幫助你表達這個功能與班級之間的緊密關係。此外,這賦予了這個功能完全訪問該類內部的權限 - 私有和受保護的成員。

後者實際上能夠實現使用靜態成員函數的一些有用的編程習慣和模式。例如,搜索「靜態構造函數」習語。

+0

但是靜態函數無法訪問私有和受保護的成員,是嗎?它只能訪問類中的其他靜態數據?我對嗎? – bodacydo 2010-07-05 02:18:15

+1

@bodacydo:不完全。當/如果給定指向該玻璃實例的指針時,靜態函數可以訪問該類的私有和受保護成員。靜態函數沒有隱含的this參數,所以如果你需要一個類的實例來訪問,你必須明確地將它傳遞給函數。 – AnT 2010-07-05 02:20:47

+0

不,你不對。如果你有一個帶有靜態方法's()'和私有成員'p'的類'A',一個傳入的實例允許'()'訪問'p'。或者'()'可以實例化'A'並填充'p'。那種東西。 – 2010-07-05 02:21:40

0

靜態類類似的命名空間,但他們提供保護(protected和private),並且可以變成模板(是的,裸露的功能也是可以的,但也有侷限,有時做一個包裝類模板更容易,甚至必要)。

0

認爲「全球」。一個非靜態函數,就像你學習的那樣,對一個對象進行操作,而一個靜態函數被一個類的所有對象共享 - 所以......所有這些對象都有什麼共同點?

它取決於你的類,但想想「彙總信息」。考慮一下數據。想想班上所有對象的共同之處。也許每個人都有一個特定的運動總數,但是你也想要一個全局總數?沿着這些線路認爲...

0

靜態成員函數可以用於靜態,常數數據成員執行非平凡初始化。例如,你可能會在某個類中使用一個靜態的,常量的容器。可以使用靜態成員函數來創建容器的實例,該實例被返回並複製到靜態常量數據成員中。

相關問題