c++静态变量,静态成员变量,静态成员函数
c++静态变量的生存期和程序的运行期相同,使用关键字static声明:
static int i = 5;
静态变量和全局变量有点类似,存储在内存静态/全局变量区。静态变量不会因为函数的调用而产生一个副本,也不会随着函数返回而失效,静态变量在函数运行期间是共享的。
c++类的静态成员是解决同一个类的不同对象之间数据和函数共享问题的。如果一个类的某个属性是整个类共享的,可以用static声明为静态成员。静态成员每个类只有一个副本,是该类所有对象共享的。
静态数据成员
它不属于任何一个对象,所以可以通过类名来访问,一般用法" 类名::标识符 "。
class A{ public: A(){ count++; } ~A(){ count--; } void showCount(){ cout<<count<<endl; } private: static int count; //静态数据成员声明,用于记录A类对象创建个数 } int A::count = 0; //使用类名初始化话静态数据成员 int main(){ Point a1; a1.showCount(); Point a2; a2.showCount(); return 0; }
程序运行结果:
1 2
静态函数成员
上述例子中,函数showCount()是用来输出静态成员变量count的,但是必须通过对象a1或者a2来调用。如果没有声明A类的对象,则无法调用showCount()函数。这是就需要将showCount()函数声明为静态成员函数了。
类的静态成员函数可以通过类名直接调用,但是直接用类名区调用不能访问非静态数据成员,因为没有具体的对象实例,所以静态成员函数一般都是用来访问类的静态成员数据的。
class A{ public: A(){ count++; } ~A(){ count--; } static void showCount(){ //静态函数成员 cout<<count<<endl; } private: static int count; //静态数据成员声明,用于记录A类对象创建个数 } int A::count = 0; //使用类名初始化话静态数据成员 int main(){ A::showCount(); Point a1; a1.showCount(); Point a2; a2.showCount(); return 0; }
运行结果:
0 1 2