静态成员是解决同一个类的不同对象之间数据和函数共享问题的。
- 实例属性:一个类的所有对象具有相同的属性,属性值可以不同。
 - 类属性:描述类的所有对象共同特征,对于任何对象其属性值相同。
 
静态数据成员
- 用关键字static声明
 - 该类的所有对象维护该成员的同一个拷贝
 - 必须在类外定义和初始化,用(::)来指明所属的类。
 
类名::标识符
静态成员函数
- 类外代码可以使用类名和作用域操作符来调用静态成员函数。
 - 也可以直接使用对象名来调用静态成员函数。
 
静态成员函数可以直接访问该类的静态数据和函数成员。而访问非静态成员必须通过对象名。
例子:具有静态成员函数和静态数据成员的Point类
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38  | 
						#include<iostream> #include<stdlib.h> using namespace std; class Point	//Point类定义 { public:	//外部接口 	Point(int xx = 0, int yy = 0) { X = xx; Y = yy; countP++; }	//构造函数 	Point(Point &p);	//复制构造函数 	~Point(){ countP--; } 	int GetX() { return X; } 	int GetY() { return Y; } 	static void GetC() { cout << " 对象 id=" << countP << endl; } 	//静态函数成员 private:	//私有数据成员 	int X, Y; 	static int countP;	//静态数据成员引用性说明 }; Point::Point(Point &p)//复制构造函数 { 	X = p.X; 	Y = p.Y; 	countP++; } int Point::countP = 0;	//静态数据成员定义性说明 //初始化,使用类名限定 void main()	//主函数实现 { 	Point A(4, 5);	//定义对象A 	cout << "Point A," << A.GetX() << "," << A.GetY(); 	A.GetC();	//输出对象号,对象名引用 	Point::GetC(); 	Point B(A);	//定义对象B 	cout << "Point B," << B.GetX() << "," << B.GetY(); 	Point::GetC();	//输出对象号,类名引用 	system("pause"); }  | 
					
结果:
Point A,4,5 对象 id=1
对象 id=1
Point B,4,5 对象 id=2





