1、静态成员变量的空间开辟以及释放和对象的空间开辟、释放没有关系。
2、静态成员变量,需要在类内声明,类外初始化。(在初始化时,就在开辟空间)
3、所有对象共享一份数据
注意:逻辑上该静态成员变量还是属于类的,所以需要作用域符号来初始化 int Person::n = 12;
- #include
- using namespace std;
-
-
- class Hero
- {
- public:
- int h_atk;
- string h_name;
- int h_arm;
- static int dragon_buf;
- };
-
- int Hero::dragon_buf =0;
-
- void test01()
- {
- Hero h1;
- h1.h_name="yasuo";
- h1.dragon_buf +=10;
-
- }
-
- void test02()
- {
- Hero h2;
- h2.h_name="dsdf";
- cout<<"name:"<
"atk:"< - }
-
- int main(int argc, char *argv[])
- {
- Hero::dragon_buf=4;
-
-
- test01();
- test02();
- return 0;
- }
2、static修饰成员函数
●static修饰成员函数,被称为静态成员函数
- #include
- using namespace std;
-
-
- class Hero
- {
- public:
- void HerInfo()
- {
- cout<<"name:"<
- cout<<"atk:"<
- cout<<"arm:"<
- cout<<"buf:"<
- }
- int h_atk;
- string h_name;
- int h_arm;
- static int dragon_buf;
- };
-
- int Hero::dragon_buf =0;
-
- void test01()
- {
- Hero h1;
- h1.h_name="yasuo";
- h1.dragon_buf +=10;
-
- }
-
- void test02()
- {
- Hero h2;
- h2.h_name="dsdf";
- cout<<"name:"<
"atk:"< - }
-
- int main(int argc, char *argv[])
- {
- Hero::dragon_buf=4;
-
-
- test01();
- test02();
- return 0;
- }
特点:
1、静态成员函数,是被所有对象共享的函数。
2、静态成员函数在编译阶段展开,所以内部的变量需要在编译阶段就存在,(所以静态成员函数内部只能访问静态成员变量,不能访问非静态成员变量.因为静态成员变量在编译阶段已经存在了)
●静态成员函数与普通成员函数主要的区别就是没有this指针,所以函数内部不区分对象
所以静态成员函数可以直接使用类名来访问:Hero::static_fun()
-
相关阅读:
ES和kibana安装
其实 Gradle Transform 就是个纸老虎 —— Gradle 系列(4)
计算机毕业设计(附源码)python助游乐系统
makefile学习汇总
NLP 类问题建模方案探索实践
计算机毕业设计(附源码)python在线共享笔记系统
iStat Menus v6.72
SDH设备
AHU 汇编 实验二
Linux - 开机启动流程
-
原文地址:https://blog.csdn.net/qq_63626307/article/details/126716186