C++Note 静态成员
C++文件执行顺序:预处理-编译-汇编-链接
静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员
静态成员分为:
静态成员变量
所有对象共享同一份数据
在编译阶段分配内存//分配在全局区
类内声明,类外初始化
1 #include <iostream> 2 using namespace std; 3 4 class Person 5 { 6 public: 7 //1.所有对象都共享同一份数据 8 //2.编译阶段就分配内存 9 //3.类内声明,类外初始化操作 10 static int m_A; 11 //静态成员变量有访问权限的 12 private: 13 static int m_B;//类外私有权限访问不到 14 }; 15 int Person::m_A = 100;//类外初始化 16 int Person::m_B = 200; 17 void test01() 18 { 19 Person p; 20 cout << p.m_A << endl;//100 21 Person p2; 22 p2.m_A = 200; 23 cout << p.m_A << endl;//200 用p访问 数据共享 p和p2的(m_A)地址相同 24 } 25 void test02() 26 { 27 //静态成员变量 不属于某个对象上 所有对象都共享同一份数据 28 //因此静态成员变量有两种访问方式 29 30 //1.通过对象进行访问 31 Person p; 32 cout << p.m_A << endl;//100 33 //2.通过类名进行访问 34 cout << Person::m_A << endl;//100 35 } 36 37 int main() 38 { 39 //test01(); 40 test02(); 41 system("pause"); 42 return 0; 43 }
静态成员函数
所有对象共享同一个函数
静态成员函数只能访问静态成员变量
1 #include <iostream> 2 using namespace std; 3 //静态成员函数 4 //所有对象共享同一个函数 5 //静态成员函数只能访问静态成员变量 6 class Person 7 { 8 public: 9 static void func()//静态成员函数 10 { 11 m_A = 200;//静态成员函数可以访问静态成员变量 数据共享一份 可以识别 12 //m_B = 200;//静态成员函数不可以访问 非静态成员变量 无法区分到底是那个对象的m_B 13 cout << "static void func调用" << endl; 14 } 15 static int m_A;//静态成员变量 16 int m_B;//非静态成员变量 17 }; 18 int Person::m_A = 100; 19 20 void test01() 21 { 22 //1.通过对象访问 23 Person p; 24 p.func(); 25 //2.通过类名访问 26 Person::func(); 27 } 28 29 int main() 30 { 31 test01(); 32 system("pause"); 33 return 0; 34 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)