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

    文章

    3868

    浏览量

    61308
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72899
收藏 人收藏

    评论

    相关推荐

    在单片机程序里频繁读写的变量放在全局或静态局部变量会更好吗?

    看看我的理解对不对 1.全局变量 静态局部变量 栈 堆 全都会放在RAM中 2.函数 uint32_t fun(uint32_t arg){ static uint32_t i
    发表于 10-16 08:05

    Java中对static关键词的介绍

    static 是Java的一个关键字,可以用来修饰成员变量、修饰成员方法、构造静态代码块、实现静态导包以及实现
    的头像 发表于 10-11 15:26 254次阅读
    Java中对static关键词的介绍

    C语言中的结构体指针在访问的时候怎么读取成员变量的数据?

    C语言中的结构体指针在访问的时候怎么读取成员变量的数据
    发表于 10-10 07:07

    静态代码块、构造代码块、构造函数及普通代码块的执行顺序

    在Java中,静态代码块、构造代码块、构造函数、普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序。 1、静态代码块 ①、格式 在java类中(方法中不能存在
    的头像 发表于 10-09 15:40 432次阅读
    <b class='flag-5'>静态</b>代码块、构造代码块、构造<b class='flag-5'>函数</b>及普通代码块的执行顺序

    有源负载和静态负载的区别是什么?

    有源负载和静态负载的区别是什么?  有源负载和静态负载是电子领域中两种常见的负载。在电路中,负载是指电路输出能力的消耗者。在这篇文章中,我们将介绍有源负载和静态负载之间的区别。 1. 有源负载
    的头像 发表于 09-18 18:20 973次阅读

    动态电路和静态电路的区别

    动态电路和静态电路的区别 动态电路和静态电路是电路的两种基本类型,它们在电子设备中的作用与应用不同。本文将详细介绍动态电路和静态电路的区别。 1. 概述 静态电路和动态电路都是电子电路
    的头像 发表于 09-17 10:47 3288次阅读

    基本放大电路中静态和静态工作点一样吗?

    基本放大电路中静态和静态工作点一样吗?  基本放大电路是指通常用于信号放大和增强的电路,它是电子工程中最基本的电路之一。在基本放大电路中,静态和静态工作点都是非常重要的概念,但它们
    的头像 发表于 09-13 14:17 1268次阅读

    怎么快速进行变量函数的命名?

    enum(枚举)类型,前缀使用“e”+枚举变量名,其成员前缀为枚举变量或者其缩写;struct(结构体)类型,前缀使用“s”+结构体变量名,其成员
    发表于 08-18 10:30 233次阅读

    UVM中通过静态类实现对全局资源实现管理

    Systemverilog中可以使用static修饰变量,方法,得到静态变量和静态函数。static也可以直接修饰class,获得静态类。但
    的头像 发表于 08-07 17:35 1095次阅读
    UVM中通过<b class='flag-5'>静态</b>类实现对全局资源实现管理

    嵌入软件静态解析工具

    的功能。[根据静态解析制作的说明书]・外部变量表・typedef表・#define表・外部变量参照表・函数参照表・structure参照表・structure
    发表于 08-02 11:51

    动态库和静态库的制作步骤

    库是一种可执行的二进制文件,是编译好的代码。使用库可以提高开发效率。在 Linux 下有静态库和动态库。 静态库在程序编译的时候会被链接到目标代码里面。所以程序在运行的时候不再需要静态库了。因此编译
    的头像 发表于 07-27 11:00 555次阅读

    C++11新的类功能(特殊成员函数、override和final)

    C++11在原有的4个特殊成员函数(默认构造函数、复制构造函数、复制赋值运算符和析构函数)的基础上新增了移动构造
    的头像 发表于 07-18 16:02 280次阅读

    类和动态内存分配(一)

    如果将成员函数声明为静态的(函数声明必须包含关键字static,但如果函数定义是独立的,则其中不能包含关键字static),则不能通过对象调
    的头像 发表于 07-18 10:45 184次阅读

    结构体成员变量的引用方法123

    这里采用的是常用的typedef关键字进行定义结构体类型,可以看到student_t这种数据类型里面有4个成员变量,分别是学号、姓名、分数、年龄,这些成员变量既然是
    的头像 发表于 07-08 14:45 1677次阅读
    结构体<b class='flag-5'>成员</b><b class='flag-5'>变量</b>的引用方法123

    static的全局变量与局部变量的使用,看完你就懂了

    和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。 在 C++ 中 static 的内部实现机制:
    发表于 06-27 08:54