在C++中,C++靜態成員的提出是為了解決數據共享的問題。實現共享的作用,下面主要講述的是如何快速高效的實現C++靜態成員的數據的共享問題。
在類中,C++靜態成員可以實現多個對象之間的數據共享,並且使用靜態數據成員還不會破壞隱藏的原則,即保證了安全性。因此,靜態成員是類的所有對象中共享的成員,而不是某個對象的成員。
使用靜態數據成員可以節省內存,因為它是所有對象所公有的,因此,對多個對象來說,靜態數據成員只存儲一處,供所有對象共用。靜態數據成員的值對每個對象都是一樣,但它的值是可以更新的。只要對靜態數據成員的值更新一次,保證所有對象存取更新後的相同的值,這樣可以提高時間效率。
靜態數據成員的使用方法和注意事項如下:
1、靜態數據成員在定義或說明時前面加關鍵字static。
2、C++靜態成員初始化與一般數據成員初始化不同。靜態數據成員初始化的格式如下:<數據類型><類名>::<靜態數據成員名>=<值>
這表明:
(1) 初始化在類體外進行,而前面不加static,以免與一般靜態變量或對象相混淆。
(2) 初始化時不加該成員的訪問權限控制符private,public等。
(3) 初始化時使用作用域運算符來標明它所屬類,因此,靜態數據成員是類的成員,而不是對象的成員。
3、靜態C++靜態成員是靜態存儲的,它是靜態生存期,必須對它進行初始化。
4、引用靜態數據成員時,采用如下格式:<類名>::<靜態成員名>
如果靜態數據成員的訪問權限允許的話(即public的成員),可在程序中,按上述格式來引用靜態數據成員。下面舉一例子,說明靜態數據成員的應用:
- #include
- class Myclass
- {
- public:
- Myclass(int a, int b, int c);
- void GetNumber();
- void GetSum();
- private:
- int A, B, C;
- static int Sum;
- };
- int Myclass::Sum = 0;
- Myclass::Myclass(int a, int b, int c)
- {
- A = a;
- B = b;
- C = c;
- Sum += A+B+C;
- }
- void Myclass::GetNumber()
- {
- cout<<"Number="<<<","<<<","<<
- }
- void Myclass::GetSum()
- {
- cout<<"Sum="<<
- }
- void main()
- {
- Myclass M(3, 7, 10),N(14, 9, 11);
- M.GetNumber();
- N.GetNumber();
- M.GetSum();
- N.GetSum();
- }
從輸出結果可以看到Sum的值對M對象和對N對象都是相等的。這是因為在初始化M對象時,將M對象的三個int型數據成員的值求和後賦給了Sum,於是 Sum保存了該值。
在初始化N對象時,對將N對象的三個int型數據成員的值求和後又加到Sum已有的值上,於是Sum將保存另後的值。所以,不論是通過對象M還是通過對象N來引用的值都是一樣的。