c static成員變數 語法

2022-09-21 14:51:14 字數 1158 閱讀 3533

目錄**2.0

#include class base

~base()

void printid()

static base* getbase()

};base base::__self{}; //不能用小括號方式初始化 base base::__self();

int main()

執行結果
base init

main init

id : 0

base destory

若沒有base base::__self{};,靜態成員變數未初始化, 鏈結時報錯:
/tmp/cc0f7qmx.o: in function `base::getbase()':

main.cpp:(.text._zn4base7getbaseev[_zn4base7getbaseev]+0x7): undefined reference to `base::__self'

collect2: error: ld returned 1 exit status

若將base base::__self{};改成base base::__self();則報錯:
main.cpp:22:19: error: no 『base base::__self()』 member function declared in class 『base』

base base::__self();

^

若把析構和構造都放在private區域,行為正常。
#include class base

public:

~base()

void printid()

static base* getbase()

};base* base::__self = new base();

//base base::__self;

int main()

__self 改為指標實現

delete base::getbase();釋放空間。若沒有這條語句,則析構不會被呼叫。

建構函式可以放在private 區域,析構不行。

C static靜態成員變數

有時候我們希望在多個物件之間共享資料,物件 a 改變了某資料後物件 b 可以檢測到。共享資料的典型使用場景是計數 以 student 類為例,如果我們想知道班級中共有多少名學生,就可以設定乙份共享的變數,每次建立物件時讓該變數加 1 在c 中,我們可以使用靜態成員變數來實現多個物件共享資料的目標。靜...

C static靜態成員變數詳解

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

C static 資料成員

static 資料成員可以宣告為任意型別,可以是常量 引用 陣列 類型別,等等。static 資料成員必須在類定義體的外部定義 類的內部為宣告 不像普通資料成員,static 成員不是通過類建構函式進行初始化,而是應該在定義時進行初始化。定義 static 資料成員的方式與定義其他類成員和變數的方式...