關於類static成員的使用

2021-10-01 09:55:39 字數 1943 閱讀 6889

成員函式(靜態/非靜態)使用靜態成員變數

//非靜態成員函式使用靜態成員變數

class

statictest

static

void

func1()

private

:static

int staticvar;

int var;};

//靜態成員函式使用靜態成員變數

class

statictest

static

void

func1()

private

:static

int staticvar;

int var;

};

編譯成功,鏈結時出錯。應該只有宣告,沒有定義的問題,類似於全域性變數。加入int statictest::staticvar = 2;後正常。

靜態成員函式使用非靜態成員變數

//非靜態成員函式使用靜態成員變數

class

statictest

static

void

func1()

private

:static

int staticvar;

int var;

};

編譯失敗。

靜態成員函式使用非靜態成員變數

//非靜態成員函式使用靜態成員變數

class

statictest

static

void

func1()

private

:static

int staticvar;

int var;

};

編譯失敗。

非靜態成員函式呼叫靜態成員函式

//非靜態成員函式使用靜態成員變數

class

statictest

static

void

func1()

private

:static

int staticvar;

int var;

};

沒有問題。

總結大致就是類內的static int staticvar;這樣的靜態成員,需要在類外(類內也行,一般類外)進行初始化後才可使用。而靜態函式不存在初始化這個問題,所以可以直接使用。

class

statictest

private

:static

int staticvar;

int var;

static

intfunc1()

};int statictest::staticvar =

func1()

;

書上的說明是,和其他成員變數一樣,可以用私有成員函式進行初始化。其實擴充套件過來應該是,靜態成員變數,可以用私有的靜態成員函式進行初始化。感覺這種用法應該比較普遍。

class

statictest

private

:static

int staticvar;

int var;

static statictest stt;

};

挺神奇的用法,先記著吧。

class

statictest

private

:static

constexpr

int staticvar =3;

int var;};

constexpr

int statictest::staticvar;

不知道怎麼用,先記著。書上說【即使乙個常量靜態資料成員在類內部被初始化,一般也應該在類外進行定義】。

C 類static 成員的使用

靜態成員屬於類,但不屬於物件所有。例如類a中含有乙個靜態成員static a,那麼所有的a的物件都可以共享a 靜態成員的提出是為了解決資料共享的問題。實現共享有許多方法,如 設定全域性性的變數或物件是一種方法。但是,全域性變數或物件是有侷限性的。這一章裡,我們主要講述類的靜態成員來實現資料的共享。類...

C 之static類成員,static類成員函式

0.static修飾類中成員,表示類的共享資料 1.static類成員 在c primer裡面說過,static類成員不像普通的類資料成員,static類資料成員獨立於一切類物件處在。static類資料成員是與類關聯的,但不與該類定義的物件有任何關係。這句話什麼意思?就是static不會想普通類資料...

類的static成員

類static成員的兩個問題 如果需要在乙個類的各個物件間互動,即需要乙個資料物件為整個類而非某個物件服務,這個時候常用類成員來解決問題。1 靜態資料成員要在類外定義。class teststatic static int teststaticfunction teststatic obj priv...