静态成员的分类
- 静态成员变量
- 静态成员函数
静态成员的访问方式
- 通过对象
- 通过类名
静态成员变量
静态成员变量, 必须在类中声明,在类外定义。
静态成员变量也具有访问控制权限。
class StaticMemberVariable
{
public:
static int s_public_num;
private:
static int s_private_num;
};
// 静态成员变量类内定义类外初始化
int StaticMemberVariable::s_public_num = 100;
int StaticMemberVariable::s_private_num = 200;
void test()
{
// 1. 通过类名来访问
cout << StaticMemberVariable::s_public_num << endl;
// 2. 通过对象来访问
StaticMemberVariable smv;
cout << smv.s_public_num << endl;
// 3. 私有静态成员变量不能访问
//cout << StaticMemberVariable::s_private_num << endl;
//cout << smv.s_private_num << endl;
}
静态变量的特点
数据共享
就是说,当一个对象修改了类的静态变量时,其他对象都能察觉到这个修改
class Demo
{
public:
int m_a; // 非静态成员变量
static int s_b; // 当做声明,并不是定义(不会给其分配内存)
};
// 类外定义
int Demo::s_b = 100;
void test()
{
// 非静态成员变量,每个对象独有
Demo d1, d2;
d1.m_a = 100;
d2.m_a = 200;
cout << d1.m_a << " " << d2.m_a << endl;
// 静态成员变量:共享数据, 归所有本类型的对象共享
d1.s_b = 100;
d2.s_b = 200;
Demo::s_b = 2000;
cout << d1.s_b << " " << d2.s_b << endl;
}
静态成员函数
静态函数的特点
- 静态成员函数只能只能访问静态成员变量。
- 静态成员函数同样具有访问权限。
- 非静态成员函数既可以访问静态成员变量、非静态成员变量。
静态成员和非静态成员的区别:
静态成员变量:
- 共享数据, 归所有本类型的对象共享
- 可以通过类名来访问
- 也可以通过对象来访问
- 静态成员变量,类内声明,类外定义
- 静态成员函数只能访问静态成员变量
非静态成员变量:
- 非静态成员变量,每个对象独有
- 非静态成员只能通过对象来访问
- 非静态成员函数可以访问本类内的所有成员