C++之静态成员变量和静态成员函数学习总结
2020-08-09 12:25
TXP嵌入式
关注
说明,这里静态成员变量不能使用初始化列表去初始化,这里要明白上面说的那句话:静态成员变量需要在类外单独分配空间,换句话说,就是只有在类的外部重新定义静态成员变量才可以存储到静态存储区。报错如下:
root@txp-virtual-machine:/home/txp# g++ test4.cpptest4.cpp: In constructor ‘Test::Test()’:test4.cpp:7:10: error: ‘int Test::mCount’ is a static data member; it can only be initialized at its definition Test():mCount(0)
4、小结:
类中可以通过static关键字定义静态成员变量
静态成员变量隶属于类所有
每个对象都可以访问静态成员变量
静态成员变量在全局数据区分配空间
静态成员变量的生命期是在程序运行期间
二、静态成员函数:
刚刚程序版本二里面其实我们还有一个功能没实现完:随时可以获取当前对象的数目。所以我们还要想办法来实现,下面是代码版本三:
#include <stdio.h>class Test{public: static int mCount;public: Test() { mCount++; } ~Test() { --mCount; } int getCount() { return mCount; }};int Test::mCount = 0;int main(){ printf("mCount = %dn", Test::mCount); Test::mCount = 1000; printf("mCount = %dn", Test::mCount); return 0;}
运行结果:
mCount = 0mCount = 1000
这里用类名来访问静态成员变量,但是不安全,比如说这里给mCount赋值1000,你能说有一千个对象嘛,再说我们也没有去手动创建对象,所以还是不符合要求;为此这里我们又要引出一个新的概念——静态成员函数。
1、在C++中可以定义静态成员函数:
静态成员函数是类中特殊的成员函数
静态成员函数属于整个类所有
可以通过类名直接访问公有静态成员函数
可以通过对象名访问公有静态成员函数
2、静态成员函数的定义:
直接通过static关键字修饰成员函数:
class Test{public: static void Func1() {} static int Func2();}
静态成员函数代码演示:
#include <stdio.h>class Demo{private: int i;public: int getI(); static void StaticFunc(const char* s); static void StaticSetI(Demo& d, int v);};int Demo::getI(){ return i;}void Demo::StaticFunc(const char* s){ printf("StaticFunc: %sn", s);}void Demo::StaticSetI(Demo& d, int v){ d.i = v;}int main(){ Demo::StaticFunc("main Begin..."); Demo d; Demo::StaticSetI(d, 10); printf("d.i = %dn", d.getI()); Demo::StaticFunc("main End..."); return 0;}
结果输出:
root@txp-virtual-machine:/home/txp# ./a.outStaticFunc: main Begin...d.i = 10StaticFunc: main End...
声明:
本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
图片新闻
技术文库
最新活动更多
-
即日-12.26立即报名>>> 【在线会议】村田用于AR/VR设计开发解决方案
-
1月8日火热报名中>> Allegro助力汽车电气化和底盘解决方案优化在线研讨会
-
1月9日立即预约>>> 【直播】ADI电能计量方案:新一代直流表、EV充电器和S级电能表
-
即日-1.14火热报名中>> OFweek2025中国智造CIO在线峰会
-
即日-1.16立即报名>>> 【在线会议】ImSym 开启全流程成像仿真时代
-
即日-1.20限时下载>>> 爱德克(IDEC)设备及工业现场安全解决方案
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论