静态成员变量
- static + 类型+变量名后,那么该类 不论 创建了多少个 实例对象 , 这些对象都会共享 该 static " 静态成员变量 " ;
-
成员变量一旦加了static关键字后就会处在静态区的,类是处在栈区的, 所以静态的成员变量只能在类外去定义,类内只能是声明,而且不可赋值!!!
-
静态成员变量 的 生命周期 就是 程序的声明周期 ;静态成员变量在 应用启动时 初始化 , 在 进程结束时销毁 ;
静态成员变量:
#include<iostream>
using namespace std;
class Student
{
public:
Student()
{
number ++;
cout << "current number=" <<number<< endl;
}
~Student()
{
number--;
cout << "current number=" <<number<< endl;
}
static int number;
};
// 在类外部初始化静态成员变量
int Student::number;
int main(){
Student s1;
Student s2;
return 0;
}
去掉static
静态成员变函数
- 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
- 静态成员也是类的成员,受public、protected、private 访问限定符的限制
#include<iostream>
using namespace std;
class test
{
public:
int var=100;
static int s_var;
static void s_func(){
cout << "static func visit static var=" << s_var<<endl;
// invalid use of member ‘test::var’ in static member function
//cout << "static func visit normal var=" << var<<endl;
}
void func(){
cout << "normal func visit static var=" << s_var<<endl;
cout << "normal func visit normal var=" << var<<endl;
}
};
// 在类外部初始化静态成员变量
int test::s_var=0;
int main(){
test t1;
t1.func();
t1.s_func();
return 0;
}