static 與 const 原文都有 "固定的" 或 "不變的" 意思,如果放在 C++ 的 class 當中又是怎麼使用呢? 讓我們用以下範例解釋:
#include <iostream>
using namespace std;
class Demo {
public:
Demo() {
cout << "*** construct new object ***" << endl;
static_count++;
count++;
}
static int get_static_count() {
cout << "static member \"static_count\" : " << static_count << endl;
return 0;
}
int get_count() {
cout << "non-static member \"count\" : " << count << endl;
return 0;
}
private:
const int const_count = 0;
static int static_count;
int count = 0;
};
int Demo::static_count = 0;
int main(void) {
Demo d1;
Demo::get_static_count();
d1.get_count();
cout << "----------------" << endl;
Demo d2;
d2.get_static_count();
d2.get_count();
cout << "----------------" << endl;
Demo d3;
d3.get_static_count();
d3.get_count();
cout << "----------------" << endl;
return 0;
}
執行的結果如下所示:
*** construct new object ***
static member "sta_count" : 1
non-static member "count" : 1
----------------
*** construct new object ***
static member "sta_count" : 2
non-static member "count" : 1
----------------
*** construct new object ***
static member "sta_count" : 3
non-static member "count" : 1
----------------
在這個範例中 class "Demo" 有2個成員,初始值都設為0
static int sta_count; int count = 0;static 類型的成員只能在 class 之外設值
int Demo::static_count = 0;我們用 class "Demo" 建立了 3 個物件,
每次新物件建立時,sta_count 以及 count 都做 +1 的動作
執行的結果顯示,"非" static 的變數每次都會隨著新物件 reset 為初始值
而 static 類型的變數,在整個程式中就是單獨唯一的,不會隨著新物件建立而產生新的副本
所以 static int sta_count 會累積數值,int count 不會
而設定為 const 類型的變數,則不能作任何更動
如 const_count ++ 編譯時會顯示錯誤