static成员
声明为static的类成员称为类的静态成员,用static声明的成员称为静态成员变量,用static修饰的成员函数称为静态成员函数。静态成员函数一定要在类外进行初始化。
在这里强调一点,static成员变量只能在类外进行初始化,因为c++规定:带有类内初始值设定的成员必须为常量。
看一个面试题:计算一个类被实例化了多少次
#include <iostream>
using namespace std;
/* 出场率非常高,类在它在,别的成员不一定存在,因为别的成员在实例化的时候才被分配空间 */
class test
{
public:
test()
{
m_a++;
}
static int m_a;
};
int test::m_a = 0;
int main()
{
//类在它在,从定义开始就有空间,存在静态区
test t;
test f;
cout << f.m_a;
system("pause");
return 0;
}
注意到,它在类外的初始化方式,static变量在被定义开始就会在程序的数据段(全局数据,静态数据)分配空间,并不会像类中别的成员变量只有在类被实例化之后才会得到内存空间。
更进一步,static存在在类的公共区域,为所有成员共享,不会使用类的空间,因此在计算类的大小是不要考虑。
注意:
1、静态成员函数不能访问任何非静态成员
2、非静态成员函数可以调用静态成员函数,因为参数的隐式类型转换,低一级的可以转换成高一级的,反之,不可。
3、静态成员和类的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值, const修饰符等参数