Q1:什麼是static類的儲存變數?
A1:在C++中,static
關鍵字可以用於類成員變數和成員函式,以改變其作用域和生命週期。當static
用於類的成員變數時,它具有以下特性:
-
全域性唯一性:靜態成員變數不屬於任何特定的物件例項,而是屬於類本身。這意味著無論建立多少個類的物件,靜態成員變數都只有一個例項。
-
初始化時機:靜態成員變數在程式開始執行時就分配記憶體和初始化(在main函式執行之前),而不是在建立物件時。
-
訪問方式:靜態成員變數可以透過類名直接訪問,也可以透過物件訪問。例如,如果有一個靜態成員變數
static int count;
,可以透過ClassName::count
或objectName.count
來訪問。 -
生命週期:靜態成員變數的生命週期與程式的執行週期相同,從程式開始執行到程式結束。
-
執行緒安全:在多執行緒環境中,靜態成員變數的訪問可能需要考慮執行緒安全問題,因為多個執行緒可能會同時訪問同一個靜態成員變數。
-
儲存位置:靜態成員變數儲存在全域性資料區,而不是物件的記憶體塊中。
下面是一個簡單的示例,展示如何在C++中使用靜態成員變數:
class MyClass {
public:
static int count; // 靜態成員變數宣告
MyClass() {
count++; // 每次建立物件時,count增加
}
};
// 靜態成員變數的定義和初始化
int MyClass::count = 0;
int main() {
MyClass obj1;
MyClass obj2;
MyClass obj3;
std::cout << "Total objects created: " << MyClass::count << std::endl;
return 0;
}
在這個例子中,count
是一個靜態成員變數,用於跟蹤建立了多少個MyClass
的物件。每次建立新物件時,count
都會增加。透過MyClass::count
可以直接訪問這個變數。