在c++中,靜態成員是屬於整個類的而不是某個物件,靜態成員變數只儲存乙份供所有物件共用。所以在所有物件中都可以共享它。使用靜態成員變數實現多個物件之間的資料共享不會破壞隱藏的原則,保證了安全性還可以節省記憶體。
靜態成員的定義或宣告要加個關鍵static。靜態成員可以通過雙冒號來使用即 《類名》::《靜態成員名》 。
在c++中類的靜態成員變數和靜態成員函式是個容易出錯的地方,本文先通過幾個例子來總結靜態成員變數和成員函式使用規則,再給出乙個例項來加深印象。希望閱讀本文可以使讀者對類的靜態成員變數和成員函式有更為深刻的認識。
1編譯出錯:error c2352: 'point::init' : illegal call of non-static member functionclass
point27
static
void
output()810
};11
void
main()
12
結論1:不能通過類名來呼叫類的非靜態成員函式。
將上例的main()改為:
void編譯通過。main()
結論2:類的物件可以使用靜態成員函式和非靜態成員函式。
1 #include 2編譯出錯:error c2597: illegal reference to data member 'point::m_x' in a static member functionclass
point38
static
void
output()912
private:13
intm_x;
14};
15void
main()
16
因為靜態成員函式屬於整個類,在類例項化物件之前就已經分配空間了,而類的非靜態成員必須在類例項化物件後才有記憶體空間,所以這個呼叫就出錯了,就好比沒有宣告乙個變數卻提前使用它一樣。
結論3:靜態成員函式中不能引用非靜態成員。
class編譯通過。point
static
void
output()
};void
main()
結論4:類的非靜態成員函式可以呼叫用靜態成員函式,但反之不能。
1 #include 2按ctrl+f7編譯無錯誤,按f7生成exe程式時報鏈結錯誤:error lnk2001: unresolved external symbol "private: static int point::m_npointcount" (?m_npointcount@point@@0ha)class
point
39 ~point()
1013
static
void
output()
1417
private:18
static
intm_npointcount;
19};
20void
main()
21
這是因為類的靜態成員變數在使用前必須先初始化。在main()函式前加上 int point::m_npointcount = 0; ,再編譯鏈結無錯誤,執行程式將輸出1。
結論5:類的靜態成員變數必須先初始化再使用。
一。靜態成員函式中不能呼叫非靜態成員。
二。非靜態成員函式中可以呼叫靜態成員。因為靜態成員屬於類本身,在類的物件產生之前就已經存在了,所以在非靜態成員函式中是可以呼叫靜態成員的。
三。靜態成員變數使用前必須先初始化(如 int myclass::m_nnumber = 0; ),否則會在linker時出錯。
再給乙個利用類的靜態成員變數和函式的例子以加深理解,這個例子建立乙個學生類,每個學生類的物件將組成乙個雙向鍊錶,用乙個靜態成員變數記錄這個雙向鍊錶的表頭,乙個靜態成員函式輸出這個雙向鍊錶。
1 #include 2 #include程式將輸出:3const
int max_name_size = 30
; 4
5class
student
6;
1819 student::student(char *pszname)
20
3031 student::~student ()//
析構過程就是節點的脫離過程
3237
else
3842
} 43
44void
student::printfallstudents()
4549
50 student* student::m_head =null;
5152
void
main()
53
C 類的靜態成員詳細講解
在c 中,靜態成員是屬於整個類的而不是某個物件,靜態成員變數只儲存乙份供所有物件共用。所以在所有物件中都可以共享它。使用靜態成員變數實現多個物件之間的資料共享不會破壞隱藏的原則,保證了安全性還可以節省記憶體。靜態成員的定義或宣告要加個關鍵static。靜態成員可以通過雙冒號來使用即 類名 靜態成員名...
C 類的靜態成員詳細講解(二)
類中的靜態成員真是個讓人愛恨交加的特性。我決定好好總結一下靜態類成員的知識點,以便自己在以後面試中,在此類問題上不在被動。靜態類成員包括靜態資料成員和靜態函式成員兩部分。一 靜態資料成員 類體中的資料成員的宣告前加上static關鍵字,該資料成員就成為了該類的靜態資料成員。和其他資料成員一樣,靜態資...
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...