静态成员变量
静态变量的特征
1.所有对象共用同一份数据
2.编译阶段就分配内存
3.类内申明,类外初始化操作
类内声明,类外初始化
#include<iostream>
using namespace std;
class Person {
public:
// 1.所有对象共用同一份数据
// 2.编译阶段就分配内存
// 3.类内申明,类外初始化操作
static int mA; // 类内申明
};
int Person::mA = 100; // 类外初始化
对象共用
void test06() {// 创建两个对象
Person p1;
cout << p1.mA << endl;
Person p2;
p2.mA = 20;
cout << p1.mA << endl; //p1.mA还是发生了变化。 也就说明这个Person类共用这 static变量
}
p1和p2共用mA这个静态变量
可以用类名来使用
void test07() {
// 我们知道了静态变量不属于某个对象,而是属于这个对象的。
// 那么也就可以通过类名来访问
cout << Person::mA << endl;
}
静态成员方法
- 所有对象共享这个函数
- 静态成员函数只能用静态变量
class Person {
public:
// 1.所有对象共用同一份数据
// 2.编译阶段就分配内存
// 3.类内申明,类外初始化操作
static int mA; // 静态成员变量
static void func() {
cout << "静态成员函数" << endl;
}
};
int Person::mA = 100;
void test08() {
// 通过对象访问
Person p1;
p1.func();
// 通过类名访问
Person::func();
}
可以看到会打印两次
方法内只能用静态成员变量
可以非静态成员变量mB
出现了报错
原因:
非静态成员变量并不是所有对象共有的,每个对象的mB都是不同的。而又要要求含有非静态变量的静态方法是所有对象共有的。
这想想就是不通的。