静态成员

来源:互联网 发布:淘客cms网站 编辑:程序博客网 时间:2024/05/19 06:49

在一个类中,若将一个成员变量声明为static,这种成员称为静态成员变量。与一般的数据成员不同,无论建立了多少个对象,都只有一个静态数据的拷贝。静态成员变量,属于某个类,所有对象共享。静态变量,在编译阶段就分配空间,对象还没有创建时,就已分配空间。

静态成员变量必须在类中声明,在类外定义。静态数据成员不属于某个对象,在对对象分配空间中不包含静态成员。静态数据成员可以通过类名或者对象名来引用。

class Person
{
public:
static int mage;//类内定义
void plusplus()
{
mage++;
}
private:
static int weight;
};
int Person::mage = 0;
int Person::weight = 0;//类外初始化
void test()
{
Person person;
person.plusplus();//mage=1;通过对象访问静态成员
Person per;
cout << per.mage << endl;//per.mage=1,静态成员只有一个拷贝,所有对象共享
Person::mage = 100;//通过类名访问静态成员
//Person::weight...静态成员也有访问权限,私有成员,类外不能访问
cout << "sizeof(Per)=" << sizeof(per) << endl;//sizeof(Person)=1,静态成员不占用类的空间。
}

关于sizeof(空类)=1的问题:

编译器会为空类安插一个char,用于辨识其实例的地址。

0 0