静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员
静态成员分为静态变量和静态函数
静态成员变量
- 所有对象共享同一份数据
- 在编译阶段分配内存
- 类内声明,类外初始化
#include "cf_08.h"
class PersonH
{
public:
static int a;
private:
static int b;
};
// 静态变量的特点: 类内声明,类外初始化
int PersonH::a = 10;
int PersonH::b = 20;
void cf_08_test_01()
{
// 通过类访问
cout << "通过类访问" << endl;
PersonH ph1;
cout << "ph1.a的值:" << ph1.a << endl;
ph1.a = 30;
//ph1.b = 20; // 私有无法访问
cout << "ph1.a的值:" << ph1.a << endl;
PersonH ph2;
ph2.a = 40; //与ph1.a共享同一份数据
cout << "ph2.a的值:" << ph2.a << endl;
cout << "ph1.a的值:" << ph1.a << endl;
// 通过类名访问
cout << endl;
cout << "通过类名访问" << endl;
cout << "PersonH.a的值" << PersonH::a << endl;
}
静态成员函数
- 所有对象共享同一个函数
- 静态成员函数只能访问静态成员变量
#include"cf_09.h"
class PersonI
{
public:
static void func_01()
{
cout << "call func_01" << endl;
cout << "value of a:"<< a << endl;
}
static int a;
int b;
private:
static void func_02()
{
cout << "call func_02" << endl;
}
};
int PersonI::a = 10;
void cf_09_test_01() {
// 通过实例访问
PersonI pi1;
pi1.func_01();
//pi1.func_02();// 私有成员函数无法访问;
// 通过类范围
PersonI::func_01();
}