為了能方便訪問靜態資料成員,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時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...