C 類中static成員的使用方法

2021-06-22 11:16:40 字數 1688 閱讀 1865

c++ programming language 10.2.4中提到一句話:靜態成員,包括函式和資料成員,都必須在某個地方另行定義,「另行」究竟指的是什麼意思呢?

如果把包含有static成員的類的定義放在標頭檔案中,而在原始檔中呼叫這個static成員變數將無法通過編譯,正確的做法是在相應的原始檔中重新定義這個類成員變數

以下就是我做的一些嘗試:

1 /*

2  * file: main.cc

3  * author: 龍泉居士

4  * date: 2012-10-16 03:21

5  */

6 7 #include 

8 9 using namespace std;

10 11 class c

12 19 };

20 21 int main ()

22 報出了main.cc:11: undefined reference to `c::x'的鏈結期錯誤,原因是x作為static成員變數沒有在類外定義。

1 /*

2  * file: main.cc

3  * author: 龍泉居士

4  * date: 2012-10-16 03:24

5  */

6 7 #include 

8 9 using namespace std;

10 11 class c

12 19 };

20 21 static int c::x = 4;

22 23 int main ()

24 報出了main.cc:15: error: 『static』 may not be used when defining (as opposed to declaring) a static data member的編譯期錯誤,這又是為什麼呢?

1 /*

2  * file: main.cc

3  * author: 龍泉居士

4  * date: 2012-10-16 03:25

5  */

6 7 #include 

8 9 using namespace std;

10 11 class c

12 19 };

20 21 int c::x = 4;

22 23 int main ()

24 這次編譯鏈結通過,程式運轉正常,原來2中的問題是在類外定義static變數時要省去static關鍵字

1 /*

2  * file: main.cc

3  * author: 龍泉居士

4  * date: 2012-10-16 03:27

5  */

6 7 #include 

8 9 using namespace std;

10 11 class c

12 19 };

20 21 int main ()

22 這一次又報出了main.cc:17: error: invalid use of qualified-name 『c::x』的錯誤,原來static變數在編譯單元內的定義必須是全域性的

必須在某個地方另行定義,但static成員函式可以在類內定義

static成員變數必須在類外定義,且必須在編譯單位的全域性內進行定義,不能定義在某個域內,如函式等

static成員(包括變數和函式),在類外重新定義時,必須省略原有的static關鍵字

C 類static 成員的使用

靜態成員屬於類,但不屬於物件所有。例如類a中含有乙個靜態成員static a,那麼所有的a的物件都可以共享a 靜態成員的提出是為了解決資料共享的問題。實現共享有許多方法,如 設定全域性性的變數或物件是一種方法。但是,全域性變數或物件是有侷限性的。這一章裡,我們主要講述類的靜態成員來實現資料的共享。類...

c 類中的static成員

概念 宣告為static的類成員稱為類的靜態成員 用static修飾的成員變數為,靜態成員變數,用static修飾的成員函式為,靜態成員函式。靜態成員變數一定要在類外進行初始化。特性 1 靜態成員為所有類物件所共享,不屬於某個具體的例項 2 靜態成員必須在類外定義 3 類靜態成員可以用 類名 靜態成...

C 之static類成員,static類成員函式

0.static修飾類中成員,表示類的共享資料 1.static類成員 在c primer裡面說過,static類成員不像普通的類資料成員,static類資料成員獨立於一切類物件處在。static類資料成員是與類關聯的,但不與該類定義的物件有任何關係。這句話什麼意思?就是static不會想普通類資料...