之所以需要定義靜態變量or靜態函數,是為了完成某些全局變量或函數才能完成的功能,而又不會破壞類的封裝性同時也解決了對命名空間的污染。
靜態可分為全局靜態與局部靜態:全局靜態與普通變量的區別在于解決他的作用域,普通全局變量可以通過extern關鍵詞被其他某塊訪問,而全局靜態不可以,所以不會有命名沖突問題。
局部靜態與普通局部變量的區別在于解決變量的生存期:因為靜態成員在內存中只有一份(屬于類而不屬于對象),所以他的生存期和類的生存期是一樣的,也就使得它可以記錄下每個對象對他的操作結果。
下面再說說靜態函數:
類的靜態函數同樣有靜態變量的特性,同時靜態函數只能調用類的靜態成員變量或靜態成員函數,因為其不屬于任何對象,所以不能通過對象來調用。調用方式:類名::function(); function可聲明為private 或protected(這一點和普通成員函數是一樣的)