在类中使用静态成员的目的是为了解决数据共享的的问题:如果想在同类中的多个对象之间实现数据共享,又避免使用全局变量,那么可以用类的静态数据成员来实现。
PS: 如果使用全局变量,这样很不安全,因为全局变量的值被所有函数所共享,可以在任何函数中被修改,而且在
大项目中,它很容易与其他名字相冲突。因此在实际中很少使用全局变量。
在C++中类的数据成员如果被声明为static,那么它就是静态数据成员,意味着它为该类的所有对象共享。
对象的普通数据成员和对象是“共消亡”的:对象在,它们自然存在;一旦对象消亡,它们自然会随之消亡。而静态数据成员就不一样了,由于它不专属于某个对象,它的生命周期与整个程序相同,因此即使某个对象消亡了,它还会在程序中继续存在,被同类的其他对象共享。
因为类的静态数据成员被保存在静态数据区,该类的所有对象都共享这块静态存储空间。静态数据成员的值对每个对象都是一样的,但它的值是可以更新的。无论那个对象修改了静态数据成员的值,同类的所有对象都会存取更新后的唯一值。
声明静态数据成员的语法:
static 数据类型 静态数据成员名
初始化静态数据成员,在类的外面,语法:
数据类型 类名::静态数据成员名=初始值
由于只属于类所有,静态数据成员的访问形式有别于普通的数据成员。
访问形式
类名::静态数据成员名
#include<iostream>
using namespace std;
class Point
{
public:
Point()
{
x=0;
y=0;
counter++;
}
~Point()
{
counter--;
}
Point(float x,float y)
{
this->x=x;
this->y=y;
counter++;
}
void move(float x,float y)
{
this->x=x;
this->y=y;
}
float getX()
{
return x;
}
float getY()
{
return y;
}
public:
static int counter;
private:
float x,y;
};
int Point::counter=0;
int main()
{
Point *p1=new Point(1,1);
Point *p2=new Point(2,2);
Point *p3=new Point(3,3);
cout<<"已创建的点数是:"<<Point::counter<<endl;
delete p1;
delete p2;
delete p3;
cout<<Point::counter<<endl;
system("pause");
return 0;
}