天天看點

C++類的靜态成員筆記

  下面是C++類的靜态成員筆記。

靜态資料成員特征

  用關鍵字static聲明

  為該類的所有對象共享,靜态資料成員具有靜态生存期

  必須在類外定義和初始化,用(::)來指明所屬的類

舉例說明-具有靜态資料成員的Point類

C++類的靜态成員筆記

 代碼示例:

 1 #include 2  3 using namespace std; 4  5 class Point  //Point類定義 6 { 7     public: //外部接口 8         Point(int x = 0, int y = 0):x(x), y(y) //構造函數 9         {10             count++;11         }12 13         Point(Point &p)  //複制構造函數14         {15             x = p.x;16             y = p.y;17             count++;18         }19 20         ~Point() //析構函數,在main函數return傳回前調用21         {22             count--;23         }24 25         int getX()26         {27             return x;28         }29 30         int getY()31         {32             return y;33         }34 35         void showCount()36         {37             cout << "Object count = " << count << endl;38         }39 40     private: //私有資料成員41         int x,y;42         static int count;  //靜态資料成員43 };44 45 int Point::count = 0; //靜态資料成員定義和初始化,使用類名限定46 47 int main(void)48 {49     Point a(4,5);50     cout << "Point A: " << a.getX() << "," << a.getY();51     a.showCount(); //輸出對象個數52 53     Point b(a); //複制構造函數調用,定義對象b,其構造函數會使得count++54     cout << "Point B:" << b.getX() << "," << b.getY();55     b.showCount();56 57 58     return 0;59 }      

運作結果:

1 Point A: 4,5Object count = 1

2 Point B:4,5Object count = 2 

靜态函數成員特征

  類外代碼可以使用類名和作用域操作符來調用靜态成員函數

  靜态成員函數主要用于處理該類的靜态資料成員,可以直接調用靜态成員函數

  如果通路非靜态成員,要通過對象來通路

舉例說明-具有靜态資料/函數成員的Point類

C++類的靜态成員筆記
 1 #include 2  3 using namespace std; 4  5 class Point  //Point類定義 6 { 7     public: //外部接口 8         Point(int x = 0, int y = 0):x(x), y(y) //構造函數 9         {10             count++;11         }12 13         Point(Point &p)  //複制構造函數14         {15             x = p.x;16             y = p.y;17             count++;18         }19 20         ~Point() //析構函數,在main函數return傳回前調用21         {22             count--;23         }24 25         int getX()26         {27             return x;28         }29 30         int getY()31         {32             return y;33         }34 35         static void showCount() //靜态函數成員36         {37             cout << "Object count = " << count << endl;38         }39 40     private: //私有資料成員41         int x,y;42         static int count;  //靜态資料成員43 };44 45 int Point::count = 0; //靜态資料成員定義和初始化,使用類名限定46 47 int main(void)48 {49     Point::showCount();50 51     Point a(4,5);52     cout << "Point A: " << a.getX() << "," << a.getY();53 54     Point::showCount();55     //a.showCount(); //也可以輸出對象個數56 57     Point b(a); //複制構造函數調用,定義對象b,其構造函數會使得count++58     cout << "Point B:" << b.getX() << "," << b.getY();59 60     Point::showCount();61     //b.showCount();//也可以輸出對象個數62 63 64     return 0;65 }      

1 Object count = 0