static 成员
声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用
static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化。
看看下面代码体会一下:
//其他类
class A
{
public:
//默认构造
A()
{
n++;
m++;
}
//拷贝构造
A(const A& a)
{
n++;
m++;
}
//析构函数
~A()
{
--m;
}
private:
//累积创建了多少个对象
static int n; //注意:这里不能给缺省值, 加上一个static之后,它就不是属于某一个对象了,而是属于这个类的所有对象了,是全局的了
//正在使用的还有多少个对象
static int m;
};
静态变量不会走初始化列表的,因为初始化列表是属于类的,是类里面的成员变量才会走初始化列表,但是静态变量是属于这个类所有对象的,所以说它不会走初始化列表,所以说我们不能给静态变量缺省值。
还有点懵?没事我们再来梳理一下:
首先我们要明白缺省值是给谁用的?
缺省值是给初始化列表用的。
初始化列表是对某个对象成员的初始化。
但是静态变量并不属于某个对象,它是属于所有对象的。
所以静态变量不能给缺省值。
以下需要注意一下:
注意:静态成员函数不能访问非静态的成员
为什么不能访问非静态的成员呢?
因为它没有this
指针