有时候类需要它的一些成员与类本身直接相关,而不是与类的各个对象保持关联。(这意味着无论创建多少个类的对象,静态成员都只有一个副本)。我们通过在成员的声明前加上关键字static使得其与类关联在一起。
静态成员变量
四个特点:
1.所有对象都共享同一份数据
2.编译阶段就分配内存(全局区)
3.类内声明,类外初始化操作
4.静态成员变量也是有访问权限的
如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零
class Person {
public:
static int m_A;
//静态成员变量也是有访问权限的
private:
static int m_B;//类外访问不到私有静态成员变量
};
int Person::m_A=100;
int Person::m_B = 200;
void test01() {
Person p;
cout << p.m_A << endl;
Person p2;
p2.m_A = 200;
cout << p.m_A << endl;
}
void test02() {
//静态成员变量 不属于某个对象上,所有对象都共享同一份数据
//因此静态成员变量有两种访问方式
//1.通过对象进行访问
Person p;
cout << p.m_A << endl;
//2.通过类名进行访问
cout << Person::m_A << endl;
}
静态成员函数
对于静态成员函数,所有对象共享同一个函数,静态成员函数只能访问静态成员变量。
访问方式:1.通过对象访问 2.通过类名访问
静态成员函数也是有访问权限的
class Person {
public:
static void func() {
m_A = 100;//静态成员函数可以访问 静态成员变量
//m_B = 200;错误 静态成员函数不可以访问非静态成员变量 无法区分是哪个对象的m_B属性
cout << "static void func调用" << endl;
}
static int m_A;//静态成员变量
int m_B;
//静态成员函数也是有访问权限的
private:
static void func2() {
}
};
int Person::m_A = 0;
void test01() {
//1.通过对象访问
Person p;
p.func();
//2.通过类名访问
Person::func();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)