下面通過幾個例子來總結靜態成員變數和靜態成員函式的使用規則。
一、通過類名呼叫靜態成員函式和非靜態成員函式
1 //例子一:通過類名呼叫靜態成員函式和非靜態成員函式編譯出錯:錯誤 1 error c2352: 「point::init」: 非靜態成員函式的非法呼叫結論一:不能通過類名來呼叫類的非靜態成員函式二、通過類的物件呼叫靜態成員函式和非靜態成員函式2 class point
6 7 static void output()
8 {}
9 };
10 11 void main()
12
1 //例子二:通過類的物件呼叫靜態成員函式和非靜態成員函式編譯通過。結論二:類的物件可以使用靜態成員函式和非靜態成員函式。三、在類的靜態成員函式中使用類的非靜態成員2 class point
7 8 static void output()
9 {}
10 };
11 12 void main()
13
1 //例子三:在類的靜態成員函式中使用類的非靜態成員編譯出錯:intellisense: 非靜態成員引用必須與特定物件相對因為靜態成員函式屬於整個類,在類例項化物件之前就已經分配空間了,而類的非靜態成員必須在類例項化物件後才有記憶體空間,所以這個呼叫就會出錯,就好比沒有宣告乙個變數卻提前使用它一樣。2 #include 3 using namespace std;
4 5 class point
10 static void output()
11
14 private:
15 int m_x;
16 };
17 void main()
18
結論三:靜態成員函式中不能引用非靜態成員。
四、在類的非靜態成員函式中使用類的靜態成員
1 //例子四:在類的非靜態成員函式中使用類的靜態成員編譯通過。結論四:類的非靜態成員可以呼叫靜態成員函式,但反之不能。五、使用類的靜態成員變數2 #include 3 using namespace std;
4 5 class point
11 static void output()
12
14 private:
15 int m_x;
16 };
17 void main()
18
1 //例子五:使用類的靜態成員變數鏈結出錯:error lnk2001: 無法解析的外部符號 "private: static int point::m_npointcount" (?m_npointcount@point@@0ha)這是因為類的成員變數在使用前必須先初始化。2 #include 3 using namespace std;
4 5 class point
11 ~point()
12
15 static void output()
16
19 private:
20 static int m_npointcount;
21 };
22 23 void main()
24
改成如下**即可:
1 #include 2 using namespace std;執行結果:3 4 class point
10 ~point()
11
14 static void output()
15
18 private:
19 static int m_npointcount;
20 };
21 22 //類外初始化靜態成員變數時,不用帶static關鍵字
23 int point::m_npointcount = 0;
24 void main()
25
結論五:類的靜態成員變數必須先初始化再使用。
靜態成員和非靜態成員的區別
靜態成員和非靜態成員的區別?答 靜態變數使用 static 修飾符進行宣告,在類被例項化時建立,通過類進行訪問不帶有 static 修飾符宣告的變數稱做非靜態變數,在物件被例項化時建立,通過物件進行訪問乙個類的所有例項的同一靜態變數都是同乙個值,同乙個類的不同例項的同一非靜態變數可以是不同的值。靜態...
C 靜態成員和非靜態成員
一 c 靜態成員和非靜態成員 1.c 靜態成員和非靜態成員 當類中的某個成員使用static修飾符時,就會被宣告為靜態成員。類中的成員要麼是靜態成員,要麼是非靜態成員。一般情況下,靜態成員屬於整個類所有,被該類的所有例項所共享。而非靜態成員則屬於類的例項 物件所有,只被該例項所共享。因此,對於類的靜...
靜態成員和非靜態成員
類中的成員要麼是靜態的要麼是非靜態的。一般來說,靜態成員都歸屬於類所有,使用 static 關鍵字來宣告,不能在類的例項中訪問靜態成員 非靜態成員屬於類的例項 物件所有,不能按照類訪問靜態成員來訪問。下面用乙個例項來幫助理解 using system using system.collections...