在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。于是就可以通过类名直接访问静态成员,即
Class::member,但是不能通过类名访问非静态成员,因为非静态成员是属于对象的,只有实例化后才能使用。这样就有
1)静态成员函数可用过类名访问,但不能通过类名来调用类的非静态成员函数
如果通过对象,则
2)静态和非静态成员都可通过对象访问
之前的游戏中,我在Food静态类中加了一个非静态成员Color,此时编译器就报错,“错误:在静态成员函数中使用成员‘Food::color’无效”,所以
3)在静态类中不能引用非静态成员,即每个静态成员函数都不能引用非静态成员。
静态成员是对立与对象存在,所以在没有对象的时候也可通过类名引用,但是需要通过Food* Food::instance = 0初始化后才能使用。
4)静态成员先初始化才能使用
另外还有
5)非静态成员函数可以调用静态和非静态成员
这些基本就是静态类的使用规则,严格遵守避免错误。