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()
-
相关阅读:
aop+springboot实现数据字典表
LinkedList详解
使用$test$plusargs提高RTL验收速度
Primavera Unifier Project Control 项目控制要点
43、基于 springboot 自动配置的 spring mvc 错误处理,就是演示项目报错后,跳转到自定义的错误页面
MLX90640 开发 微型红外成像仪
数据结构知识点总结12-(第六章.图)-图的存储结构及图的遍历
PPLiteSeg训练自己的数据集实现自动驾驶并爆改制作成API可供其他Python程序调用实时语义分割(超低延时)
原版畅销36万册!世界级网工打造TCP/IP圣经级教材,第5版终现身
为什么vscode更新不成功,系统找不到指定路径
-
原文地址:https://blog.csdn.net/qq_63626307/article/details/126716186