0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++之静态成员变量和静态成员函数学习的总结

电子设计 来源:电子设计 作者:电子设计 2020-12-24 17:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

不知不觉,又到周末了;上次在交流群里,答应给大家免费送开发板,一开始认为板子够送,但是昨天整理了一下,然后送了大概十几个网友就不够送了,还有十几个网友没得到板子,这里说声实在抱歉,下次有机会搞活动再送给大家好玩的板子:

上图的板子有最近买的,也有以前买的(stm32esp8266、51、eps32、小熊派、合宙的cat1、树莓派3b+);说实话,这些板子买来,一直放在那里吃灰,后期自己的方向也不玩硬件开发板啥的;所以上面的板子都送给了公众号读者在校生,让这些板子发挥它们最大的价值,板子也会在最近慢慢一一送出去;赠人与玫瑰,手有余香!

好了回归主题,今天继续分享c++的文章,学习还是不能落下,flag未完成,任务艰巨,好好学习。

一、静态成员变量:

平时我们在写类的时候,类中的成员变量,我们一般是通过对象名来访问public成员变量的,一般private(私有)的成员变量,对象是不能直接访问的;同时我们要明白每个对象的成员变量都是专属的,而且成员变量是不能在对象之间共享的,这就是专属性。下面我们来做一个小的程序需求来慢慢引出静态成员变量:

统计在程序运行期间某个类的对象数目

要保证该程序的安全性(不能使用全局变量)

随时可以获取当前对象的数目

代码版本一:

#include<stdio.h>classTest{private:intmCount;public:Test():mCount(0){mCount++;}~Test(){--mCount;}intgetCount(){returnmCount;}};TestgTest;intmain(){Testt1;Testt2;printf("mCount=%dn",gTest.getCount());printf("mCount=%dn",t1.getCount());printf("mCount=%dn",t2.getCount());return0;}

运行结果:

root@txp-virtual-machine:/home/txp#./a.outmCount=1mCount=1mCount=1

从运行结果来我们可以看出来,对象独立性(专属性);而且结果没有达到我们的预期要求,于是乎,为了解决这个问题,我们就要排静态成员变量出场了。

1、c++中可以定义静态成员变量:

静态成员变量属于整个类所有

静态成员变量的生命期不依赖于任何对象(上面的程序,每个对象的成员变量是独立的,所以打印出的mCount的值分别为1)

可以通过类名直接访问公有静态成员变量

所有对象共享类的静态成员变量

可以通过对象名 访问公有静态成员变量

2、静态成员变量的特性:

在定义时直接通过static关键字修饰

静态成员变量需要在类外单独分配空间

静态成员变量在程序内部位于全局数据区

3、语法规则:

TypeClassName::VarName=value;注意在类的外部进行初始化

代码版本二:

#include<stdio.h>classTest{private:staticintmCount;public:Test()//不要使用初始化列表进行初始化{mCount++;}~Test(){--mCount;}intgetCount(){returnmCount;}};intTest::mCount=0;TestgTest;intmain(){Testt1;Testt2;printf("mCount=%dn",gTest.getCount());printf("mCount=%dn",t1.getCount());printf("mCount=%dn",t2.getCount());return0;}

运行结果:

root@txp-virtual-machine:/home/txp#./a.outmCount=3mCount=3mCount=3
审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4421

    浏览量

    67819
  • C++
    C++
    +关注

    关注

    22

    文章

    2124

    浏览量

    77353
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MIC5236:低静态电流μCap LDO稳压器的卓越

    MIC5236:低静态电流μCap LDO稳压器的卓越选 在电子设计领域,电源管理芯片的性能直接影响着整个系统的稳定性和效率。今天,我们要深入探讨一款出色的低静态电流μCap LDO稳压器
    的头像 发表于 03-31 11:50 216次阅读

    Microchip MCP1700:低静态电流LDO的卓越

    Microchip MCP1700:低静态电流LDO的卓越选 在电子设备的电源管理领域,低静态电流低压差线性稳压器(LDO)是至关重要的组件,能为设备提供稳定的电源。Microchip
    的头像 发表于 03-30 15:20 172次阅读

    ADP165/ADP166:低静态电流LDO稳压器的卓越

    ADP165/ADP166:低静态电流LDO稳压器的卓越选 在电子设备的电源管理领域,低静态电流、高性能的低压差线性稳压器(LDO)一直是工程师们追求的目标。今天,我们就来深入探讨一下Analog
    的头像 发表于 03-19 16:20 172次阅读

    变频器的静态调试步骤

    变频器的“静态调试”通常有两种理解:一种是指电机 不旋转 的情况下,让变频器自动测量电机电气参数的 “静态学习” (或静态辨识);另一种更广泛的含义是指变频器在 带电机但不带负载 的
    的头像 发表于 03-11 07:36 617次阅读
    变频器的<b class='flag-5'>静态</b>调试步骤

    SGM66099C:超低静态电流同步升压转换器的卓越

    SGM66099C:超低静态电流同步升压转换器的卓越选 在电子设备的电源管理领域,高效、稳定且低功耗的升压转换器一直是工程师们追求的目标。今天,我们就来深入了解一下SGMICRO推出
    的头像 发表于 01-28 14:45 385次阅读

    keil中c语言的动态分配内存

    段。用于存放函数体(类成员函数和全局函数)的二进制代码。。 截至目前,我们所使用的变量似乎都是在栈区(如局部
    发表于 01-21 06:04

    请问如何从一个函数内部判断本函数是否是个成员函数还是个非成员函数

    如何从一个函数内部判断本函数是否是个成员函数还是个非成员函数
    发表于 01-06 06:30

    嵌入式C语言中各变量存储位置

    局部变量、局部静态变量、全局变量、全局静态变量区别如下: 局部变量: 栈区; 局部静态变量
    发表于 12-25 07:54

    关于晶振的静态电容与动态电容

    静态电容与动态电容 C0与C1 的区别是什么呢?
    的头像 发表于 11-21 15:38 4524次阅读
    关于晶振的<b class='flag-5'>静态</b>电容与动态电容

    常用变量的介绍

    extern:用在全局变量上表示该变量在其他文件中已经定义;用在函数上作用同全局变量; static:用在全局变量上,和非
    发表于 11-21 07:05

    飞凌嵌入式ElfBoard-Vim编辑器静态链接和动态链接

    文件,一般是以.so文件形式存在。GCC默认是动态链接不需要加参数。举例子看一下动态链接库的使用方法,创建三个C语言文件:mymath.c、mymath.h、test.c。通过两个变量
    发表于 10-17 09:07

    C/C++代码静态测试工具Perforce QAC 2025.3的新特性

     Perforce Validate 中 QAC 项目的相对/根路径的支持。C++ 分析也得到了增强,增加了用于检测 C++ 并发问题的新检查,并改进了实体名称和实
    的头像 发表于 10-13 18:11 709次阅读
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代码<b class='flag-5'>静态</b>测试工具Perforce QAC 2025.3的新特性

    D3502C:低静态电流设计,延长设备续航能力

            在当今电子设备日益便携化和智能化的背景下,电源管理芯片的低功耗设计成为提升设备续航能力的关键因素之一。D3502C 高压降压转换器,凭借其低静态电流设计,显著延长了电池供电设备
    的头像 发表于 07-14 14:53 721次阅读

    动态BGP与静态BGP的区别?

    支持自动发现(通常通过监听端口) 适用场景小型网络、连接少量对等网络大型网络、频繁变动的对等关系 可维护性修改需人工操作,灵活性差可自动发现/建立邻居,运维更自动化 路由学习来源通常结合静态路由导入来自
    发表于 06-24 06:57

    在设置 gpioClock 时,如何设置成员变量以实现从高到低的速度?

    在设置 gpioClock 时,如何设置成员变量以实现从高到低的速度?
    发表于 05-23 06:47