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立场。如有侵权或其他问题,请联系举报。
图片新闻
技术文库
最新活动更多
-
3月27日立即报名>> 【工程师系列】汽车电子技术在线大会
-
在线会议观看回放>>> AI加速卡中村田的技术创新与趋势探讨
-
4月30日立即参与 >> 【白皮书】研华机器视觉项目召集令
-
5月15-17日立即预约>> 【线下巡回】2025年STM32峰会
-
即日-5.15立即报名>>> 【在线会议】安森美Hyperlux™ ID系列引领iToF技术革新
-
5月15日立即下载>> 【白皮书】精确和高效地表征3000V/20A功率器件应用指南
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论