C++類中靜態變量和靜態方法使用介紹

靜態成員的提出是爲了解決數據共享的問題。實現共享有許多方法,如:設置全局性的變量或對象是一種方法。可是,全局變量或對象是有侷限性的。這一章裏,咱們主要講述類的靜態成員來實現數據的共享。ios

  靜態數據成員安全

  在類中,靜態成員能夠實現多個對象之間的數據共享,而且使用靜態數據成員還不會破壞隱藏的原則,即保證了安全性。所以,靜態成員是類的全部對象中共享的成員,而不是某個對象的成員。函數

  使用靜態數據成員能夠節省內存,由於它是全部對象所公有的,所以,對多個對象來講,靜態數據成員只存儲一處,供全部對象共用。靜態數據成員的值對每一個對象都是同樣,但它的值是能夠更新的。只要對靜態數據成員的值更新一次,保證全部對象存取更新後的相同的值,這樣能夠提升時間效率。spa

  靜態數據成員的使用方法和注意事項以下:code

  一、靜態數據成員在定義或說明時前面加關鍵字static。//靜態變量的定義對象

  二、靜態成員初始化與通常數據成員初始化不一樣。靜態數據成員初始化的格式以下:blog

    <數據類型><類名>::<靜態數據成員名>=<值>  //靜態變量的初始化內存

  這代表:作用域

         (1) 初始化在類體外進行,而前面不加static,(這點須要注意)以避免與通常靜態變量或對象相混淆。權限控制

  (2) 初始化時不加該成員的訪問權限控制符private,public等。

  (3) 初始化時使用做用域運算符來標明它所屬類,所以,靜態數據成員是類的成員,而不是對象的成員。

  三、靜態數據成員是靜態存儲的,它是靜態生存期,必須對它進行初始化。

  四、引用靜態數據成員時,採用以下格式:

   <類名>::<靜態成員名>   //靜態變量的使用方式

  若是靜態數據成員的訪問權限容許的話(即public的成員),可在程序中,按上述格式來引用靜態數據成員。

  下面舉一例子,說明靜態數據成員的應用:

 1 class StaticTest
 2 {
 3 public:
 4     StaticTest(int a, int b, int c);
 5     void GetNumber();
 6     void GetSum();
 7     static void f1(StaticTest &s);
 8 private:
 9     int A, B, C;
10     static int Sum;
11 };
12 
13 
14 
15 #include "StaticTest.h"
16 #include <iostream>
17 using namespace std;
18 
19 int StaticTest::Sum = 0;//靜態成員在此初始化
20 
21 StaticTest::StaticTest(int a, int b, int c)
22 {
23     A = a;
24     B = b;
25     C = c;
26     Sum += A + B + C;
27 }
28 
29 void StaticTest::GetNumber()
30 {
31     cout << "Number = " << endl;
32 }
33 
34 void StaticTest::GetSum()
35 {
36     cout << "Sum = " << Sum <<endl;
37 }
38 
39 void StaticTest::f1(StaticTest &s)
40 {
41     
42     cout << s.A << endl;//靜態方法不能直接調用通常成員,能夠經過對象引用實現調用
43     cout << Sum <<endl;
44 }
45 
46 #include "StaticTest.h"
47 #include <stdlib.h>
48 
49 
50 int main(void)
51 {
52     StaticTest M(3, 7, 10), N(14, 9, 11);
53     M.GetNumber();
54     N.GetSum();
55     M.GetNumber();
56     N.GetSum();
57     StaticTest::f1(M);
58     system("pause");
59     return 0;
60 }

 

注意,static成員的初始化要在實現中進行,不能在頭文件進行。

從輸出結果能夠看到Sum的值對M對象和對N對象都是相等的。這是由於在初始化M對象時,將M對象的三個int型數據成員的值求和後賦給了Sum,因而Sum保存了該值。在初始化N對象時,對將N對象的三個int型數據成員的值求和後又加到Sum已有的值上,因而Sum將保存另後的值。因此,不管是經過對象M仍是經過對象N來引用的值都是同樣的,即爲54,s.A=3。

靜態成員函數

  靜態成員函數和靜態數據成員同樣,它們都屬於類的靜態成員,它們都不是對象成員。所以,對靜態成員的引用不須要用對象名。

  在靜態成員函數的實現中不能直接引用類中說明的非靜態成員,能夠引用類中說明的靜態成員(這點很是重要)。若是靜態成員函數中要引用非靜態成員時,可經過對象來引用。從中可看出,調用靜態成員函數使用以下格式:<類名>::<靜態成員函數名>(<參數表>);

相關文章
相關標籤/搜索