物件導向中的static

2021-07-24 07:28:37 字數 2158 閱讀 3665

之前寫了一篇面向過程的static,現在來認識一下面向過程的static。面向過程的static主要體現在三個方面。修飾全域性變數,修飾區域性變數和修飾函式。在物件導向中,主要體現在以下兩方面:

用法:宣告時在成員變數型別前加static。初始化時要在類外進行。

classa;

int a::a=0;//初始化靜態成員變數a;

改變:儲存位置發生改變,他的資料會儲存在資料段中(有一些文章會寫存入全域性資料區,靜態資料區的,首先全域性資料區就是靜態資料區,他們都位於資料段)。這將發生一系列連鎖的變化。

在定義時就要為靜態成員變數分配記憶體空間,類只有在例項化時才會分配空間,所以不能在類內定義。

對於非靜態成員變數,每個類物件都有自己的拷貝,分配不同的記憶體空間。而靜態成員變數被當作是類的成員。無論這個類的物件被定義了多少個,靜態成員變數在程式中也只有乙份,只佔據一塊記憶體空間,由該型別的所有物件共享訪問。所以靜態成員變數在每個物件中都是一樣的。

因為靜態成員變數在資料段分配記憶體,屬於本類的所有物件共享,所以,它不屬於特定的類物件,在沒有產生類物件時其作用域就可見,即在沒有產生類的例項時,我們就可以操作它。

如果靜態成員變數的訪問許可權允許的話(即public的成員),可在程式中引用靜態成員變數:

<類物件名>.<靜態成員變數名> 或 <類型別名>::<靜態成員變數名>

未變:靜態資料成員和普通資料成員一樣遵從public,protected,private訪問規則;

作用:乙個類宣告的物件中,靜態成員變數是可以當全域性變數使的。或在繼承中,如果在基類中宣告乙個靜態成員變數。那麼,在基類和子類所宣告的物件中,這個靜態成員變數可以有和全域性變數有一樣的功效。而且還比全域性變數有優勢。

靜態成員變數相較全域性變數的優勢:

1. 靜態資料成員沒有進入程式的全域性名字空間,因此不存在與程式中其它全域性名字衝突的可能性。

2. 可以封裝,實現資訊隱藏。靜態資料成員可以是private成員,而全域性變數不能。

用法:宣告時在返回值型別前加static,定義時不能加。呼叫靜態成員函式,可以用成員訪問操作符(.)和(->)為乙個類的物件或指向類物件的指標呼叫靜態成員函式,也可以直接使用如下格式:

<類名>::<靜態成員函式名>(<參數列>)

classa;

//定義靜態成員函式

void a::function

()//呼叫靜態成員函式

a a;

a.function();

a::function

();

改變:在類的內部實現,也就是說該類的全部服務而不是為某乙個類的具體物件服務。正因如此它也沒有this指標。

普通的成員函式一般都隱含了乙個this指標,this指標指向類的物件本身,因為普通成員函式總是具體的屬於某個類的具體物件的。通常情況下,this是預設的。如函式fn()實際上是this->fn()。

由於沒有this指標它無法訪問屬於類物件的非靜態成員變數,也無法訪問非靜態成員函式,它只能呼叫其餘的靜態成員函式。

未變:還是可以被非靜態成員函式任意地訪問。

作用:由於沒有this指標的額外開銷,因此靜態成員函式與類的全域性函式相比速度上會有少許的增長。

#include

using

namespace

std;

class a

int getsum();

static

void printsum();

private:

int a,b;

static

int sum;

};int a::sum=0;

int a::getsum()

void a::printsum()

輸出結果:

355

5

其實static關鍵字給所修飾物件帶來的最大改變就是儲存位置的改變,所以記憶體區段的劃分對我們理解程式設計還是有著很重要的意義的。

C 中的static用法(面向過程 物件導向)

c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。一 面向過程設計中的static 1 靜態全域性變數 在全域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態全域性變...

static之物件導向

一 靜態資料成員子 includeusing namespace std class point int point num 0 定義靜態資料成員 int main 對於類的非靜態資料成員,每個類物件都有自己的拷貝。而對於靜態資料成員被當作是類的成員。就像上述例子中,雖然定義了4個物件,但是靜態資料...

物件導向 static 十四

1.static關鍵字及記憶體圖 class demo1 static class person 建立物件記憶體圖 2.static關鍵字的特點 a static關鍵字的特點 a 隨著類的載入而載入 b 優先於物件存在 c 被類的所有物件共享 舉例 咱們班級的學生應該共用同乙個班級編號。其實這個特點...