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

2021-04-01 20:22:34 字數 1479 閱讀 5836

c++類中的靜態成員有乙個非常好的功能,那就是無論類定義了多少個物件,這些物件始終都共同使用這乙個靜態成員

例如:  class a     } 

int a::num=0; 

就會有如下效果:  a  a,b,c,d;     cout<可以看出,在每個物件中的num成員都只有乙個副本。在記憶體中也是如此,初始化abcd時並沒有分配新的記憶體。

在使用靜態成員的過程中還有以下幾點注意:

1.num不可以在類中初始化,更不可以在建構函式或建構函式初始化表中初始化。必須在類外初始化。方法是:

int a::num=0;    此時不能有物件被定義,也就是說縣定義num才可以,定義a b等

2.如果num為public成員,那麼任何時候都可以這樣呼叫它 a::num  當然 a.num也可以

對於靜態成員函式,它的特點和靜態資料成員相似但也有不同:

class a   

static int p()      }//wrong 

1.可以在類中定義。這一點與靜態資料成員不同

2.若p()為public成員,則可以這樣呼叫a::p()。這一點與靜態資料成員相同。

3.靜態成員函式不屬於任何乙個特定的物件,所以不存在隱含的this指標。如果要在函式中訪問某個特定的物件的成員,必須結合使用操作符「.」或「->」來顯示地制定所屬物件。

4上面所給的程式是錯誤的因為num不屬於所有的物件。如果num是靜態的則可以。

靜態成員函式常用來操作靜態資料成員。

c++類中的靜態成員有乙個非常好的功能,那就是無論類定義了多少個物件,這些物件始終都共同使用這乙個靜態成員

例如:  class a     } 

int a::num=0; 

就會有如下效果:  a  a,b,c,d;     cout<可以看出,在每個物件中的num成員都只有乙個副本。在記憶體中也是如此,初始化abcd時並沒有分配新的記憶體。

在使用靜態成員的過程中還有以下幾點注意:

1.num不可以在類中初始化,更不可以在建構函式或建構函式初始化表中初始化。必須在類外初始化。方法是:

int a::num=0;    此時不能有物件被定義,也就是說縣定義num才可以,定義a b等

2.如果num為public成員,那麼任何時候都可以這樣呼叫它 a::num  當然 a.num也可以

對於靜態成員函式,它的特點和靜態資料成員相似但也有不同:

class a   

static int p()      }//wrong 

1.可以在類中定義。這一點與靜態資料成員不同

2.若p()為public成員,則可以這樣呼叫a::p()。這一點與靜態資料成員相同。

3.靜態成員函式不屬於任何乙個特定的物件,所以不存在隱含的this指標。如果要在函式中訪問某個特定的物件的成員,必須結合使用操作符「.」或「->」來顯示地制定所屬物件。

4上面所給的程式是錯誤的因為num不屬於所有的物件。如果num是靜態的則可以。

靜態成員函式常用來操作靜態資料成員。

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

c 類中的靜態成員有乙個非常好的功能,那就是無論類定義了多少個物件,這些物件始終都共同使用這乙個靜態成員 例如 class a int a num 0 就會有如下效果 a a,b,c,d cout 可以看出,在每個物件中的num成員都只有乙個副本。在記憶體中也是如此,初始化abcd時並沒有分配新的記...

靜態成員與靜態函式

靜態成員和函式可以被所有物件共享使用 當它的值發生變化時,所有物件中的值隨之發生變化 而普通物件中的成員的值變化時,並不影響其他物件中的值 1.靜態成員變數和函式的宣告 在前邊加上關鍵字 static static double rate 2.定義 靜態成員的定義 靜態成員一定需要定義 變數的型別 ...

c 類的靜態函式和靜態成員

static資料成員 靜態資料成員儲存在全域性資料區,靜態資料成員定義時要分配空間,所以不能在類宣告中定義。應該在類外定義。靜態資料成員和普通資料成員一樣遵從public private protected訪問規則。由於靜態資料成員在全域性資料區分配記憶體,屬於本類的所有物件共享,它不屬於特定的類物...