c 之關鍵字static

2021-08-09 21:27:22 字數 2049 閱讀 9404

static這個關鍵字的作用有兩個,乙個是修飾變數,乙個是修飾函式。

變數又分為區域性變數和全域性變數,但他們都存在記憶體的靜態區。

也就是說,當static修飾的是區域性變數,那就是改變了區域性變數的生存時間;如果沒有static區域性變數修飾,那麼當區域性變數所處的函式結束時,該變數也就被釋放了;但是如果加上static修飾的話,那麼該變數一直存在,直到程式執行結束。

其次,對於class(類)中使用static修飾的成員變數,是不能在類中進行定義的,而要對類中的靜態成員變數定義則必須在類外定義

打個比方:比如說有1000個物件,但這1000個物件有乙個相同屬性的引數,那麼對於這個屬性的引數,為了便於這1000個物件呼叫這個共同屬性的引數,則應該將這個引數設計為靜態member。

函式前加static使得函式成為靜態函式,但此時的static不是指儲存方式,而是指對函式的作用域僅侷限於本檔案(所以又稱內部函式)使用內部函式的好處是:不同的人編寫不同的函式時,不用擔心自己定義的函式,是否會與其他檔案中的函式同名。

但是:靜態函式只能處理靜態的引數,不能處理非靜態引數

那麼對於已經定義好的靜態函式,如何呼叫呢

對於c++中如何呼叫靜態函式有兩種方法:

class a

通過object呼叫方法:a.getinstance();

通過class name 呼叫:呼叫形式為類名::靜態函式名()

對於上述的類,通過方法二呼叫的形式:

a::getinstance();

要求乙個類只希望建立乙個物件時(建構函式放在private中)

private中放了乙個自己a,當外界沒有任何人建立物件a時,物件a已經存在了,當我不想外界再建立類a的物件a時,將建構函式放在private中,此時外界無法再建立類a的物件。則類a只有乙份自己a;那麼外界需要取物件a時,則public中用乙個static函式來呼叫靜態物件a。則外界只能通過這個靜態成員函式得到唯一的a。程式如下(通過物件a來呼叫靜態成員函式):

以下程式引用了台灣著名c++技術專家——侯捷先生的一段程式:

class a

setup();

...private:

a();//建構函式

a(const a & rhs);//複製建構函式

static a a;

...};a::getinstance().setup();//方法二呼叫

或者: a.getinstance().setup();//方法一呼叫

但是對於上述的一段程式還可以在進行改進;因為當外界沒有需要用到物件a,但是這個物件a一直存在,這樣會造成浪費。那麼可以通過另一種寫法來避免這個缺陷,其目的是,只有當外界呼叫到靜態成員函式時,物件a才會被建立,當離開這個函式時a仍然存在,並且永遠只有這乙份:

class a;
靜態函式的定義:

a & a::getinstance()
呼叫方法:

a::getinstance().setup();

關鍵字之static

小白眼中的static關鍵字用法 1 static方法 直接類名.方法命。如圖 2 static變數 靜態變數是共享,在類初次載入時會被初始化。比如我要在多個地方用到乙個叫string型別為 csdn 的資料。只需用static定義一次就好。private static final string c...

C 關鍵字之static詳解

static靜態的,不變的,在某個類中只有乙個,不會因例項化物件的不同而不同。static可以修飾類 字段 屬性 方法等。如乙個方法前加上static修飾後要對其進行呼叫可以直接通過類名點出來,不用再對類進行例項化。一 靜態類 1.只能包含靜態成員 靜態方法或靜態變數 非靜態成員是不能使用的,而非靜...

this關鍵字 static關鍵字

1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...