大二上 C++高階程式設計筆記(1) 棧和c++對c的補充 20240908

陆舟LandBoat發表於2024-09-08

Q1:什麼是static類的儲存變數?

A1:在C++中,static關鍵字可以用於類成員變數和成員函式,以改變其作用域和生命週期。當static用於類的成員變數時,它具有以下特性:

  1. 全域性唯一性:靜態成員變數不屬於任何特定的物件例項,而是屬於類本身。這意味著無論建立多少個類的物件,靜態成員變數都只有一個例項。

  2. 初始化時機:靜態成員變數在程式開始執行時就分配記憶體和初始化(在main函式執行之前),而不是在建立物件時。

  3. 訪問方式:靜態成員變數可以透過類名直接訪問,也可以透過物件訪問。例如,如果有一個靜態成員變數static int count;,可以透過ClassName::countobjectName.count來訪問。

  4. 生命週期:靜態成員變數的生命週期與程式的執行週期相同,從程式開始執行到程式結束。

  5. 執行緒安全:在多執行緒環境中,靜態成員變數的訪問可能需要考慮執行緒安全問題,因為多個執行緒可能會同時訪問同一個靜態成員變數。

  6. 儲存位置:靜態成員變數儲存在全域性資料區,而不是物件的記憶體塊中。

下面是一個簡單的示例,展示如何在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可以直接訪問這個變數。

相關文章