c++ static

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;

};

静态变量不会走初始化列表的,因为初始化列表是属于类的,是类里面的成员变量才会走初始化列表,但是静态变量是属于这个类所有对象的,所以说它不会走初始化列表,所以说我们不能给静态变量缺省值。
还有点懵?没事我们再来梳理一下:
首先我们要明白缺省值是给谁用的?
缺省值是给初始化列表用的。
初始化列表是对某个对象成员的初始化。
但是静态变量并不属于某个对象,它是属于所有对象的。
所以静态变量不能给缺省值。

以下需要注意一下:
c++ static_第1张图片
c++ static_第2张图片
注意:静态成员函数不能访问非静态的成员
为什么不能访问非静态的成员呢?
因为它没有this指针

你可能感兴趣的:(c++)