C 靜態成員和非靜態成員的區別和使用

2022-07-21 04:09:14 字數 2529 閱讀 6956

下面通過幾個例子來總結靜態成員變數和靜態成員函式的使用規則。

一、通過類名呼叫靜態成員函式和非靜態成員函式

1 //例子一:通過類名呼叫靜態成員函式和非靜態成員函式

2 class point

6 7 static void output()

8 {}

9 };

10 11 void main()

12

編譯出錯:錯誤 1 error c2352: 「point::init」: 非靜態成員函式的非法呼叫結論一:不能通過類名來呼叫類的非靜態成員函式二、通過類的物件呼叫靜態成員函式和非靜態成員函式

1 //例子二:通過類的物件呼叫靜態成員函式和非靜態成員函式

2 class point

7 8 static void output()

9 {}

10 };

11 12 void main()

13

編譯通過。結論二:類的物件可以使用靜態成員函式和非靜態成員函式。三、在類的靜態成員函式中使用類的非靜態成員

1 //例子三:在類的靜態成員函式中使用類的非靜態成員

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

編譯出錯:intellisense: 非靜態成員引用必須與特定物件相對因為靜態成員函式屬於整個類,在類例項化物件之前就已經分配空間了,而類的非靜態成員必須在類例項化物件後才有記憶體空間,所以這個呼叫就會出錯,就好比沒有宣告乙個變數卻提前使用它一樣。

結論三:靜態成員函式中不能引用非靜態成員。

四、在類的非靜態成員函式中使用類的靜態成員

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 //例子五:使用類的靜態成員變數

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

鏈結出錯:error lnk2001: 無法解析的外部符號 "private: static int point::m_npointcount" (?m_npointcount@point@@0ha)這是因為類的成員變數在使用前必須先初始化。

改成如下**即可:

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...