静态成员变量
- 所有对象共享同一份数据,不占用对象内存,可以不通过类对象直接进行访问
- 类内声明,类外初始化
- 和普通静态变量生命周期一样,本质上属于全局静态变量
#include <iostream>
class Person {
public:
static int m_s_a;
private:
int m_a;
};
int Person::m_s_a = 10;
int main()
{
//不通过类对象可直接访问
Person::m_s_a = 20;
Person p;
std::cout << "p的大小:" << sizeof(p) << std::endl; //4byte
system("pause");
return 0;
}
对象p的内存空间不包含静态成员变量
静态成员函数
- 所有对象共享同一个函数(可通过类作用域直接访问)
- 静态成员函数只能访问静态成员变量(因为无法区分普通成员变量是属于哪个对象)
- 静态成员函数也是有访问权限的
#include <iostream>
class Person {
public:
static void func() {
m_s_a = 20;
//m_b = 20; //不可访问,无法知道是属于哪个对象的
std::cout << "静态函数调用" << std::endl;
}
static int m_s_b;
private:
static int m_s_a;
int m_b;
};
int Person::m_s_a = 10;
int Person::m_s_b = 100;
int main()
{
//直接通过作用域进行调用
Person::func();
//通过类对象进行调用
Person p;
p.func();
Person::m_s_b = 200;//可访问
//Person::m_s_a;//不可访问,访问权限对静态成员变量也起作用
system("pause");
return 0;
}