下面是C++類的靜态成員筆記。
靜态資料成員特征
用關鍵字static聲明
為該類的所有對象共享,靜态資料成員具有靜态生存期
必須在類外定義和初始化,用(::)來指明所屬的類
舉例說明-具有靜态資料成員的Point類

代碼示例:
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類
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