在C++中,靜態成員是屬於整個類的而不是某個對象,靜態成員變量只存儲一份供所有對象共用。所以在所有對象中都可以共享它。於是就可以通過類名直接訪問靜態成員,即
Class::member,但是不能通過類名訪問非靜態成員,因爲非靜態成員是屬於對象的,只有實例化後才能使用。這樣就有
1)靜態成員函數可用過類名訪問,但不能通過類名來調用類的非靜態成員函數
如果通過對象,則
2)靜態和非靜態成員都可通過對象訪問
之前的遊戲中,我在Food靜態類中加了一個非靜態成員Color,此時編譯器就報錯,“錯誤:在靜態成員函數中使用成員‘Food::color’無效”,所以
3)在靜態類中不能引用非靜態成員,即每個靜態成員函數都不能引用非靜態成員。
靜態成員是對立與對象存在,所以在沒有對象的時候也可通過類名引用,但是需要通過Food* Food::instance = 0初始化後才能使用。
4)靜態成員先初始化才能使用
另外還有
5)非靜態成員函數可以調用靜態和非靜態成員
這些基本就是靜態類的使用規則,嚴格遵守避免錯誤。