一、概念
當我們聲明類的成員為靜态時,這意味着無論建立多少個類的對象,靜态成員都隻有一個副本。
靜态成員在類的所有對象中是共享的。如果不存在其他的初始化語句,在建立第一個對象時,所有的靜态資料都會被初始化為零。我們不能把靜态成員的初始化放置在類的定義中,但是可以在類的外部通過使用範圍解析運算符 :: 來重新聲明靜态變量進而對它進行初始化。
1 #include <iostream>
2
3 using namespace std;
4
5 class Box
6 {
7 public:
8 static int objectCount;
9 // 構造函數定義
10 Box(double l=2.0, double b=2.0, double h=2.0)
11 {
12 cout <<"Constructor called." << endl;
13 length = l;
14 breadth = b;
15 height = h;
16 // 每次建立對象時增加 1
17 objectCount++;
18 }
19 double Volume()
20 {
21 return length * breadth * height;
22 }
23 private:
24 double length; // 長度
25 double breadth; // 寬度
26 double height; // 高度
27 };
28
29 // 初始化類 Box 的靜态成員
30 int Box::objectCount = 0;
31
32 int main(void)
33 {
34 Box Box1(3.3, 1.2, 1.5); // 聲明 box1
35 Box Box2(8.5, 6.0, 2.0); // 聲明 box2
36
37 // 輸出對象的總數
38 cout << "Total objects: " << Box::objectCount << endl;
39
40 return 0;
41 }
當上面的代碼被編譯和執行時,它會産生下列結果:
Constructor called.
Constructor called.
Total objects: 2
二、靜态成員和非靜态成員的差別
https://www.cnblogs.com/hmdyc/p/6601766.html
三、初始化
類中特殊成員變量的初始化問題:
- 常量變量:必須通過構造函數參數清單進行初始化。
- 引用變量:必須通過構造函數參數清單進行初始化。
- 普通靜态變量:要在類外通過"::"初始化。
- 靜态整型常量:可以直接在定義的時候初始化。
- 靜态非整型常量:不能直接在定義的時候初始化。要在類外通過"::"初始化。
/*******相與枕藉乎舟中,不知東方之既白*******/