C 類中的靜態成員函式 static

2021-06-25 19:10:02 字數 896 閱讀 6826

為了能方便訪問靜態資料成員,c++定義了一種特殊的成員函式來專門負責對靜態資料成員的訪問,這種函式叫做靜態成員函式。

靜態成員函式的定義是在非靜態成員函式的定義前加上static關鍵字。它的訪問方式和靜態資料成員相似,也是通過作用域限定符來訪問,語法如下:

類名::靜態成員函式名(引數)

作為類的成員,靜態成員函式同樣受到訪問許可權的控制。對於公有的靜態成員函式,可以通過類名來呼叫;而一般的非靜態成員函式只能通過物件名來呼叫。

#includeusing namespace std;

class cdemo

static int incr()

private:

int i;

static int j;

};int cdemo::j=0;

int main()

{ cout<<"j="<

可以看出,靜態成員函式不能訪問普通資料成員,它的作用主要是操縱同類中的靜態資料成員。

類的普通成員函式都擁有this指標,當某個物件呼叫成員函式時,系統先將物件的位址賦給this指標,成員函式在執行時,由this指標標識資料成員所屬的物件。

而靜態成員函式沒有this指標,但可以通過該類名來實現對它的訪問。

如果靜態成員函式在執行過程中出現有非靜態的資料成員,那麼這個資料成員就無法被指明所屬物件,無法進行正確的訪問,函式也就無法再執行下去。

例如static int incr()

return i+j;//出錯,因為靜態成員函式,j不能有非靜態資料成員i相加

可以做以下修改

statci int incr(point p)

return p.i+j;

由此可見,要想在靜態成員函式中訪問非靜態資料成員是比較麻煩的,因此類的靜態成員函式主要用來訪問同類中的靜態資料成員。

C 類靜態成員與類靜態成員函式

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

C 類靜態成員與類靜態成員函式

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

C 類靜態成員與類靜態成員函式

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...