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訪問規則。由於靜態資料成員在全域性資料區分配記憶體,屬於本類的所有物件共享,它不屬於特定的類物...