静态成员相关知识
静态成员就是成员变量和成员函数前加关键字static,称为静态成员。
静态成员分为静态成员变量和静态成员函数。
静态成员变量
所有对象共享同一份数据,在编译阶段分配内存,类内声明,类外初始化。
#include<iostream>
using namespace std;
class Person
{
public:static int m_A;//所有对象共享同一份数据,编译阶段就分配了内存};
int Person::m_A = 100;//类外初始化
void test01()
{Person p;cout << p.m_A << endl;Person p2;p2.m_A = 200;cout << p.m_A << endl;//由于共享一份数据,用p.m_A访问,也是200
}int main()
{test01();
}
静态成员变量不属于某个对象上,所以所有对象都共享一份数据,因此静态成员变量有两种访问方式
1.通过对象进行访问
2.通过类名进行访问
void test02()
{Person p;cout << p.m_A << endl;//通过对象访问cout << Person::m_A << endl;//通过类名访问属性
}
int main()
{test02();
}
静态成员变量有访问权限,,如果是私有作用域下,类外无法访问。
静态成员函数
所有对象共享同一个函数,静态成员函数只能访问静态成员变量。
#include<iostream>
using namespace std;
class Person
{
public:static void func(){cout << "静态成员函数调用" << endl;}
};int main()
{
//两种访问方式Person p;p.func();//因为不属于对象,所以可以使用类名来访问Person::func();
}
静态成员函数只能访问静态成员变量。
#include<iostream>
using namespace std;
class Person
{
public:static void func(){m_A = 200;//静态成员函数可以访问静态成员变量//m_B = 200;此时静态成员函数,无法访问非静态成员变量,无法区分是哪个对象的m_B的属性cout << "静态成员函数调用" << endl;}static int m_A;int m_B;
};
int Person::m_A = 0;
int main()
{Person p;p.func();Person::func();
}