天天看點

【概念】靜态成員

一、概念

當我們聲明類的成員為靜态時,這意味着無論建立多少個類的對象,靜态成員都隻有一個副本。

靜态成員在類的所有對象中是共享的。如果不存在其他的初始化語句,在建立第一個對象時,所有的靜态資料都會被初始化為零。我們不能把靜态成員的初始化放置在類的定義中,但是可以在類的外部通過使用範圍解析運算符 :: 來重新聲明靜态變量進而對它進行初始化。

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

三、初始化

類中特殊成員變量的初始化問題:

  • 常量變量:必須通過構造函數參數清單進行初始化。
  • 引用變量:必須通過構造函數參數清單進行初始化。
  • 普通靜态變量:要在類外通過"::"初始化。
  • 靜态整型常量:可以直接在定義的時候初始化。
  • 靜态非整型常量:不能直接在定義的時候初始化。要在類外通過"::"初始化。

/*******相與枕藉乎舟中,不知東方之既白*******/