C static靜態成員變數

2022-04-12 16:32:33 字數 1766 閱讀 7169

有時候我們希望在多個物件之間共享資料,物件 a 改變了某資料後物件 b 可以檢測到。共享資料的典型使用場景是計數 

以 student 類為例,如果我們想知道班級中共有多少名學生,就可以設定乙份共享的變數,每次建立物件時讓該變數加 1

在c++中,我們可以使用靜態成員變數來實現多個物件共享資料的目標。靜態成員變數是一種特殊的成員變數,它被關鍵字static修飾

#include #include 

using

namespace

std;

class

student

public

:

static

int m_total; //

靜態成員變數

/*static 成員變數屬於類,不屬於某個具體的物件,即使建立多個物件,也只為 m_total 分配乙份記憶體,所有物件使用的都是這份記憶體中的資料。當某個物件修改了 m_total,也會影響到其他物件

static 成員變數必須在類宣告的外部初始化:

格式:變數型別 類名::變數名 = 初始化值;

static 成員變數和普通的 static 變數類似,都在記憶體分割槽中的全域性資料區分配記憶體

*/private

:

string

m_name;

intm_age;

};int student::m_total = 0; //

初始化靜態成員變數

//靜態成員變數在初始化時不能再加 static,但必須要有資料型別。被 private、protected、public 修飾的靜態成員變數都可以用這種方式初始化

//注意:static 成員變數的記憶體既不是在宣告類時分配,也不是在建立物件時分配,而是在(類外)初始化時分配。反過來說,沒有在類外初始化的 static 成員變數不能使用

intmain()

完整的例子:計數功能

#include #include 

using

namespace

std;

class

student

public

:

static

intm_total;

private

:

string

m_name;

intm_age;

};int student::m_total = 0

;int

main()

#include using

namespace

std;

class

a

static

const

int spec=10; //對};

//int a::spec = 10; //錯

/*上面兩處錯誤原因:修飾符static只能在類外初始化,修飾符const(引用、類物件)只能用初始化列表初始化,兩者相互矛盾

解決辦法:只能在宣告時初始化

C static靜態成員變數詳解

class student 物件的記憶體中包含了成員變數,不同的物件占用不同的記憶體 已在 c 物件的記憶體模型 中提到 這使得不同物件的成員變數相互獨立,它們的值不受其他物件的影響。例如有兩個相同型別的物件 a b,它們都有乙個成員變數 m name,那麼修改 a.m name 的值不會影響 b....

C static靜態成員

class a a void fun 普通成員函式 static void printnum 靜態成員函式 private int m a 普通成員變數 int m b 普通成員變數 static int num 靜態成員變數 靜態成員必須在定義類的檔案中對靜態成員變數進行初始化,否則會編譯出錯。i...

C static 靜態成員

靜態成員包括靜態資料成員和靜態成員函式,提供了同類物件間資料成員的共享機制 靜態成員不是某個物件的成員,是類所有物件的共享成員,只建立乙個成員副本 定義格式 static 型別 成員名 引用格式 類名 靜態成員 初始化格式 型別 類名 靜態資料成員 初始化值 靜態資料成員為同類所有物件所共享,不能使...