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立场。如有侵权或其他问题,请联系举报。
图片新闻
最新活动更多
-
5月10日立即下载>> 【是德科技】精选《汽车 SerDes 发射机测试》白皮书
-
5月16日火热报名>>> OFweek锂电/半导体行业数字化转型在线研讨会
-
5月22日立即报名>>> OFweek 2024新周期显示技术趋势研讨会
-
5月28日立即观看>> 【在线研讨会】Ansys镜头点胶可靠性技术及方案
-
5月31日立即报名>> 【线下论坛】新唐科技2024未来创新峰会
-
6月18日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
- 1 拆机实锤!华为Pura70使用新芯片,推测为7nm,性能如何?
- 2 华为P70系列即将强势来袭,能否再次复制华为Mate60系列的辉煌?
- 3 中国芯片基地诞生:一年产量1055亿颗,占全国30%,三省共占67%
- 4 华为麒麟9010、苹果A17、高通8Gen3对比,差距有多大?
- 5 避免内卷?中国大陆4大芯片代工厂,产能、营收、优势介绍
- 6 形势严峻!暴增256%,中国还在疯狂进口ASML光刻机
- 7 过去14个月,山东从荷兰进口了12台光刻机
- 8 华为Pura70又打脸了?美国商务部长:华为芯片没那么先进
- 9 MTK和Intel联手,投资RISC-V芯片新贵谋发展?
- 10 华为Pura70证明:我们7nm已没问题,接下来是5nm、3nm
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论