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_B cout << "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; }