一、静态成员
静态成员是在成员变量和成员函数前面加上关键字 static。
二、静态成员变量
1. 静态成员变量的性质
作为静态成员变量,符合以下特点:
- 所有对象共享同一份数据;
- 在编译阶段分配内存,在主函数之前进行构造;
- 类内声明,类外初始化;
- 存放在静态区,不占用对象内存;
- 在发生继承时,静态成员变量不会被继承,父类子类共享同一个静态成员。
#include <iostream>
using namespace std;
class Person {
public:
static int a;
Person() {
this->a++;
}
};
// 类外初始化
int Person::a = 1;
int main() {
// 所有对象共享一份数据
Person a1, a2, a3, a4;
cout << a1.a << " " << a2.a << " " << a3.a << " " << a4.a << endl; // 输出 5 5 5 5
// 存放在静态区,不占用对象内存
cout << sizeof(a1); // 输出 1
return 0;
}
代码中将静态变量 a 初始化为 1,在无参构造函数中,通过自增变量进行初始化。按理来说创建四个类的对象 a1、a2、a3、a4,每次都会调用无参构造方法,这样分别输出四个对象的变量 a,得到的值应该是 2、3、4、5 才对,那为什么实际输出的结果不是这样呢?
这是因为'针对静态变量而言,所有对象都会共享同一份数据',所以静态变量 a 的最终态(a=5)是所有对象时刻共享的。
2. 静态成员变量的访问
两种方式:1. 通过对象访问;2. 通过类名访问。
class Person {
public:
a;
};
{
Person a1;
aa = ;
Person::a = ;
}
