1.静态数据成员
静态数据成员 是类中的一个成员,定义时前面有static
关键字修饰它的特点是
- (1)同一个类中的所有对象都共享该变量。如果类的一个对象改变了静态数据成员的值,那么该类的所有对象的该静态数据成员的值都将改变。
- (2)静态变量不依赖对象而存在,无论是否定义该类的对象,这种类型的变量都存在。
class StaticDemo {
private:
static int x; //说明静态的数据成员
int y;
public:
static void setX(int);
...;
};
注意: 仅仅对静态变量x进行如上说明还是不够的,还必须要在类外对它进行定义
int StaticDemo::x; //定义静态的数据成员,初始值是0
在类外对静态数据成员x给出定义,在不显示初始化的情况下,他的初值是0,。如果按照如下方式定义x,那么它的初值是100。
int StaticDemo::x = 100;
2.静态函数成员
从函数表面上看,静态函数成员是类中的函数,他前面有static
修饰,格式为:
static <返回值类型> <函数名>(形式参数表)
静态函数成员在类外的定义和其它函数成员定义一样,不需要加static
。
静态的函数成员不能访问类中的非静态成员。换句话讲,它只能访问类中定义的静态成员(即静态数据成员和函数成员),这是因为:
- (1)静态数据成员实际上是类外定义的一个变量,它的生存周期和整个程序的生存周期一样,在定义对象之前,静态数据成员就已经存在。
- (2)静态函数成员和静态数据成员类似,在对象生成之前就已经存在。在对象产生之前,静态函数成员就能够访问其它静态成员,从而可以给对象设置特殊任务。
注意:
- 调用静态函数成员setX的语句如下:
StaticDemo::setX(num);
静态函数成员是通过类名和作用域调用的,也可以使用通常的调用方法,采用对象点的方式调用。