下面是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