1、静态成员变量
- 所有对象共享同一份数据
- 在编译阶段分配内存
- 类内声明,类外初始化
#include <iostream>
using namespace std;
#include <string>class Person {
public://1 所有对象都共享一份数据//2 编译阶段就分配内存//3 类内声明,类外初始化操作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 << p2.m_A << endl;}void test02() {//静态成员变量 不属于某个对象,所有对象都共享同一份数据//因此静态成员变量有两种访问方式//1、通过对象进行访问Person p;cout << p.m_A << endl;//2、通过类名进行访问cout << Person::m_A << endl;//cout << Person::m_B << endl;类外访问不到私有静态成员变量
}int main() {//test01();test02();system("pause");return 0;
}
2、静态成员函数
- 所有对象共享同一个函数
- 静态成员函数只能访问静态成员变量
#include <iostream>
using namespace std;
#include <string>//所有对象共享一个函数
//静态成员函数只能访问静态成员变量class Person {
public://静态成员函数static void func() {m_A = 100;//静态成员函数可以访问静态的成员变量//m_B = 200;//静态成员函数不可以访问非静态成员变量,无法区分到底是哪个对象的m_Bcout << "static void func的调用" << endl;}static int m_A;//静态成员变量int m_B;//非静态成员变量//静态成员函数也是有访问权限的
private:static void func2() {cout << "static void func2的调用" << endl;}
};int Person::m_A;void test01() {//1、通过对象访问Person p;p.func();//2、通过类名访问Person::func();//Person::func2();类外访问不到私有静态成员函数
}int main() {test01();system("pause");return 0;
}