靜態成員變數成員函式

2021-09-26 07:58:05 字數 2104 閱讀 7723

1.先來介紹它的第一條也是最重要的一條:隱藏。(static函式,static變數均可)

當同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。

舉例來說明。同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。

char a = 'a'; // global variable

void msg()

int main()

程式的執行結果是:

a hello

為什麼在a.c中定義的全域性變數a和函式msg能在main.c中使用?前面說過,所有未加static字首的全域性變數和函式都具有全域性可見性,其它的原始檔也能訪問。此例中,a是全域性變數,msg是函式,並且都沒有加static字首,因此對於另外的原始檔main.c是可見的。

如果加了static,就會對其它原始檔隱藏。例如在a和msg的定義前加上static,main.c就看不到它們了。利用這一特性可以在不同的檔案中定義同名函式和同名變數,而不必擔心命名衝突。static可以用作函式和變數的字首,對於函式來講,static的作用僅限於隱藏.

2.static的第二個作用是保持變數內容的持久。(static變數中的記憶功能和全域性生存期)

儲存在靜態資料區的變數會在程式剛開始執行時就完成初始化,也是唯一的一次初始化。共有兩種變數儲存在靜態儲存區:全域性變數和static變數,只不過和全域性變數比起來,static可以控制變數的可見範圍,說到底static還是用來隱藏的。雖然這種用法不常見

ps:如果作為static區域性變數在函式內定義,它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式內使用該變數。退出該函式後, 儘管該變數還繼續存在,但不能使用它。

---基於以上兩點可以得出乙個結論:把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域, 限制了它的使用範圍。因此static 這個說明符在不同的地方所起的作用是不同的。

1)定義靜態成員變數

靜態成員提供了乙個同類物件的共享機制

例如:

#includeusing namespace std;

class counter

//成員函式訪問靜態資料成員

void shownum()

} ;int counter :: num = 0 ;//宣告與定義靜態資料成員

int main ()

#includeusing namespace std;

class counter

int mem; //公有資料成員

static int smem ; //公有靜態資料成員

} ;int counter :: smem = 1 ; //初始值為1

1)概念

#include using namespace std;

class bb

void addc()

static void getc() //靜態成員函式

protected:

private:

int a;

int b;

static int c; //靜態成員變數

};//靜態函式中 不能使用 普通成員變數 普通成員函式 ..

int bb::c = 10;

int main()

靜態成員變數成員函式

靜態成員變數 1 定義靜態成員變數 關鍵字static可以用於說明乙個類的成員,靜態成員提供了乙個同類物件的共享機制 把乙個類的成員說明為static時,這個類無論有多少個物件被建立,這些物件共享這個static成員 靜態成員區域性於類,它不是物件成員 includeusing namespace ...

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

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

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

資料成員可以分靜態變數 非靜態變數兩種.靜態成員 靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名 靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員.因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中靜...