静态成员变量
#include<bits/stdc++.h>
using namespace std;
class Person{
public:
//1、所有对象都共享同一份数据
//2、编译器阶段就分配内存
//3、类内声明,类外初始化操作
static int m_A;
//静态成员变量也是有访问权限的
private:
static int m_B;
};
int Person::m_A=100;
int Person::m_B=200;
void test01(){
Person p;
cout<<p.m_A<<endl;//100
Person p2;
p2.m_A=200;
cout<<p.m_A<<endl;//200
}
void test02(){
//静态成员变量不属于某个对象上,所有对象都共享同一份数据
//因此静态成员变量有两种访问方式
//1、通过对象进行访问
Person p;
cout<<p.m_A<<endl;
//2、通过类名进行访问
cout<<Person::m_A<<endl;
//cout<<Person::m_B<<endl; 类外访问不到私有静态成员变量
}
int main()
{
//test01();
test02();
return 0;
}
-
静态成员变量:
static int m_A;
和static int m_B;
是Person
类的静态成员变量。静态成员变量属于整个类,而不是类的单个对象。在类内部声明静态成员变量,但是需要在类外部初始化。 -
静态成员变量的初始化:在类外部,通过
Person::m_A=100;
和Person::m_B=200;
进行静态成员变量的初始化。静态成员变量只会被初始化一次,即使创建了多个类的对象。 -
静态成员变量的访问:
- 可以通过类的对象进行访问,例如
p.m_A
。 - 也可以通过类名直接访问,例如
Person::m_A
。
-
静态成员变量的访问权限:与普通成员变量类似,静态成员变量也可以设置为私有(private)或者公有(public)。在示例中,
m_B
被声明为私有静态成员变量,因此无法在类外部直接访问,如cout<<Person::m_B<<endl;
就会导致编译错误。 -
静态成员变量的特性:
- 所有对象共享同一份静态成员变量。
- 编译器在编译阶段就会为静态成员变量分配内存空间,而非在对象创建时。
- 静态成员变量的生命周期与程序的生命周期相同。