偷偷拿来记录一下萌新的cs路——day 25
静态成员变量
特点:所有对象共享一份数据;编译阶段分配内存至全局区;类内声明,类外初始化。
访问方式:通过对象;通过类名(::)。
#include<iostream>
using namespace std;
// 静态成员变量
class Person {
public:
// 所有对象共享一份数据
// 编译阶段分配内存至全局区
// 类内声明,类外初始化
static int m_A;
};
int Person::m_A = 100; // 初始化Person作用域下的变量
// 通过对象访问静态成员变量
void test01() {
Person p;
cout << p.m_A << endl;
Person p2;
p2.m_A = 200;
cout << p.m_A << endl;
}
// 通过类名访问
void test02() {
cout << Person::m_A << endl;
}
int main() {
test01();
test02();
return 0;
}
运行结果
由于静态成员变量具有所有对象共享一份数据的特点,故p2.m_A被赋值为200后,输出p.m_A记过也为200。
静态成员函数
特点:所有对象共享一个函数;只能访问静态成员变量。
访问方式:同静态成员变量。
#include<iostream>
using namespace std;
// 静态成员变量
// 所有对象共享一份数据
// 编译阶段分配内存至全局区
// 类内声明,类外初始化
class Person {
public:
// 静态成员函数
// 所有对象共享一个函数
// 只能访问静态成员变量
static void personality() {
cout << "personality调用" << endl;
m_A = 300;
// 不可访问m_B(非静态成员变量)
}
static int m_A;
int m_B;
};
int Person::m_A = 100; // 初始化Person作用域下的变量
// 通过对象访问静态成员变量
void test01() {
Person p;
p.personality();
/*cout << p.m_A << endl;
Person p2;
p2.m_A = 200;
cout << p.m_A << endl;*/
}
// 通过类名访问
void test02() {
Person::personality();
cout << Person::m_A << endl;
}
int main() {
test01();
test02();
return 0;
}
运行结果:
在静态成员函数中将m_A赋值为300后,m_A输出结果变为300。
以后学了更多知识还会回来更新的!有误之处恳请大佬指正,提前感谢!