静态成员
要点:
(1)静态成员为所有类对象共有,不属于某个具体的对象,并且使放于静态区
(2)静态成员变量必须在类外定义,定义时不添加static关键字
(3)类静态成员即可用类名::静态成员或者对象.静态成员来访问
(4)静态成员函数没有隐藏的this指针,不能访问任何非静态成员
(5)静态成员和类的普通成员一样,也有public ,protected,private3种访问权限,也可以有返回值
//静态成员
//计算一个程序中A定义多少个对象出来
class A
{
public:
A()
{
++_n;
}
A(const A& a)
{
++_n;
}
//跟普通成员函数区别:没有this指针,不能访问非静态成员
static int GetN()
{
return _n;
}
private:
//声明,不再构造函数初始化
static int _n; //n是存在静态区,属于整个类,也属于类的所有对象
};
//静态成员变量初始化,不受访问限定符的限制
int A::_n = 0;
void f(A a)
{
}
int main()
{
//A a;
//cout << sizeof(A) << endl; //1
//cout << sizeof(a) << endl; //1
A a1;
A a2;
A();
f(a1);
cout << sizeof(A) << endl;
//静态成员,不属于某个对象,突破类域就能访问
//_n为为共有成员变量时访问的方式
//cout << A::_n << endl; //public
//cout << a1._n << endl; //public
//cout << a2._n << endl; //public
//cout << A()._n << endl; //public
cout << a1.GetN() <<endl;
cout << A().GetN() << endl;
cout << A::GetN() << endl;
return 0;
}