靜態成員變數

2021-06-21 10:46:21 字數 1447 閱讀 7310

在上一課中的靜態成員變數,你了解到的類可以有成員變數是在類的所有物件共享。然而,

如果我們的

靜態成員變數是

私人的?

考慮下面的例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

classsomething

;

intsomething::s_nvalue = 1;// initializer

intmain()

在這種情況下,我們不能訪問的東西::s_nvalue直接從main(),因為它是私人的。通常我們訪問私有成員通過公共成員函式。雖然我們可以創造乙個正常的公共成員函式訪問s_nvalue,我們就需要例項化的類型別物件的使用功能!我們可以做的更好。在這種情況下,這個問題的答案是,我們也可以使成員函式的靜態。

像靜態成員變數,靜態成員函式不屬於任何特定的物件。這是上面的例子和乙個靜態成員函式訪問:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

classsomething

};

intsomething::s_nvalue = 1;// initializer

intmain()

由於靜態成員函式不連線到乙個特定的物件,他們可以通過使用類的名稱和作用域操作符直接呼叫。像靜態成員變數時,他們也可以通過該類型別的物件被稱為,雖然不推薦。

靜態成員函式有兩個有趣的怪癖值得注意。首先,由於靜態成員函式不附加到乙個物件,他們沒有this指標!這是有道理的當你想想,這個指標總是指向成員函式的工作物件。靜態成員函式不工作的乙個物件,所以這個指標是不需要的。

第二,靜態成員函式只能訪問靜態成員變數。不能訪問非靜態成員變數。這是因為非靜態成員變數必須屬於乙個類物件,和靜態成員函式沒有類物件的工作!

這裡的另乙個例子使用靜態成員變數和成員函式:

靜態成員函式 靜態成員變數

靜態的成員函式,同靜態資料成員類似,它也是屬於類,而不是屬於某乙個物件的。靜態成員函式不能訪問非靜態的資料成員,它只能訪問靜態資料成員,也只能呼叫其它的靜態成員函式。原因是 當前物件的位址 this 是被隱含地傳遞到被呼叫的函式的。但乙個靜態成員函式沒有 this 指標,所以它無法訪問非靜態的成員函...

靜態成員變數

程式設計實習 郭煒 微博 劉家瑛 微博 資訊科學技術學院 1 靜態成員變數和靜態成員函式 ifndef test define test include include include define n 11000 using namespace std endif include test.h c...

c 靜態變數,靜態成員變數,靜態成員函式

c 靜態變數的生存期和程式的執行期相同,使用關鍵字static宣告 static int i 5 靜態變數和全域性變數有點類似,儲存在記憶體靜態 全域性變數區。靜態變數不會因為函式的呼叫而產生乙個副本,也不會隨著函式返回而失效,靜態變數在函式執行期間是共享的。c 類的靜態成員是解決同乙個類的不同物件...