1. 程式人生 > >C++筆記 第二十六課 類的靜態成員函式---狄泰學院

C++筆記 第二十六課 類的靜態成員函式---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習C++編譯環境:Linux

第二十六課 類的靜態成員函式

1.未完成的需求

統計在程式執行期間某個類的物件數目
保證程式的安全性(不能使用全域性變數)
隨時可以獲取當前物件的數目(Failure)

26-1 解決方案的嘗試

#include <stdio.h>
class Test
{
public:
    static int cCount;
public:
    Test()
    {
        cCount++;
    }
    ~Test()
    {
        --cCount;
    }
    int getCount()
    {
        return cCount;
    }
};
int Test::cCount = 0;
int main()
{
    printf("count = %d\n", Test::cCount);
    
    Test::cCount = 1000;
    
    printf("count = %d\n", Test::cCount);
    
    return 0;
}

2.問題分析

我們需要什麼?
不依賴物件就可以訪問靜態成員變數
必須保證靜態成員變數的安全性
方便快捷的獲取靜態成員變數的值

3.靜態成員函式

在C++中可以定義靜態成員函式
靜態成員函式是類中特殊的成員函式
靜態成員函式屬於整個類所有
可以通過類名直接訪問公有靜態成員函式
可以通過物件名訪問公有靜態成員函式
靜態成員函式的定義
直接通過static關鍵字修飾成員函式

26-2 靜態成員函式示例

靜態成員函式VS普通成員函式
在這裡插入圖片描述

26-3 最後的解決方案

#include <stdio.h>
class Test
{
private:
    static int cCount;
public:
    Test()
    {
        cCount++;
    }
    ~Test()
    {
        --cCount;
    }
    static int GetCount()
    {
        return cCount;
    }
};
int Test::cCount = 0;
int main()
{
    printf("count = %d\n", Test::GetCount());
    
    Test t1;
    Test t2;
    
    printf("count = %d\n", t1.GetCount());
    printf("count = %d\n", t2.GetCount());
    
    Test* pt = new Test();
    
    printf("count = %d\n", pt->GetCount());
    
    delete pt;
    
    printf("count = %d\n", Test::GetCount());
    
    return 0;
}

小結
靜態成員函式是類中特殊的成員函式
靜態成員函式沒有隱藏的this引數
靜態成員函式可以通過類名直接訪問
靜態成員函式只能直接訪問靜態成員變數(函式)