类中static变量和普通变量的区别(一便解释了摘要中的内容)

​  要理解标题,我们首先来看下static变量本身的特殊之处,即它存储在全局数据区。在类中的static变量也是如此。

C++的内存分布
代码区 :函数体的二进制代码
全局数据区:全局变量和static变量
堆 :动态内存分配 -> 通过new
栈 :局部变量
常量区 :字符/文字常量

    这之后我们先通过代码观察一下区别是什么。我定义了一个Test类,并在其中定义了一个普通成员变量和一个static变量,代码如下。


​                  图1-1

​   我定义的Test类中定义了一个普通成员变量和一个static变量,运行该程序,结果如下。


​ 图1-2

​  从图1-2中可以发现类中的static变量没有被分配空间,即static在类中只是声明,而非定义。

​  最后,我们知道了结果,现在来理解一下。其实我们只要知道了static变量为什么不能在类中定义,我们要知道定义一个变量则一定会给其开辟一个空间(即使不初始化、赋值也是如此),正如类中的普通成员变量,我仍以整型说明,当其被定义于类中时,就是表明此类需要一个整型的空间,所以每创建一个类对象时,就会给该对象相应的大小。

​  而正如开头所说,static变量是存储于全局数据区的,与类对象(对象中包括成员变量)的存储位置并不相同,所以在类中不是定义(不给其空间),这是根据事实解释。更形象一点说,static变量相当于类的一种属性,它是“”虚无缥缈“的,它针对的是类本身,而类中的定义则针对的是对象,所以不能在类中定义static变量,只是声明这种属性。

​  所以,在熟练之前,不妨这样记忆:类中的定义服务于对象,类中的static变量服务于类,所以static变量应在外面定义。

初始化

  既然静态成员变量、函数(静态成员函数没有 this 指针)只能在类中声明,而不能在类中定义,那么它的初始化就理所应当在类外,这也同时说明若没有初始化、定义,静态成员变量、函数是不能直接使用的。并且,在类外定义、初始化时不再加 static 修饰符(语法规定)。

类中static变量和成员变量相关推荐

  1. c++模板类静态成员变量_一文讲透父子类中静态变量,成员变量初始化顺序原理...

    推荐: 从面试到入职到离职,我在B站工作的30天时光 爱了爱了,Alibaba顶级MySQL调优手册到手,加薪妥了 爱了爱了,Spring Cloud Alibaba内部微服务架构笔记真的太牛了 本文 ...

  2. python类中包含一个特殊的变量、它可以访问类的成员_Python 类的特殊成员介绍...

    类的成员有两种形式 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法,私有成员命名时,前两个字符是下划线. class Foo: def __init__(self, name, age ...

  3. python类中包含一个特殊的变量、它可以访问类的成员_区域联防的运用中遵循并贯彻以球为主的防守原则,做到球人区三者兼顾。( )...

    刘墉书法的特点是用墨厚重,体丰骨劲,浑厚敦实,别具面目.A:对B:错 Python类中包含一个特殊的变量(),它表示当前对象自身,可以访问类的成员.A:meB:selfC:thisD:与类同名 在过火 ...

  4. python类中包含一个特殊的变量、它可以访问类的成员_Python类中包含一个特殊的变量( ),它表示当前对象自身,可以访问类的成员....

    包含票务系统的业务管理主要内容包括()A:运营监督B:规则管理C:信息管理D:财务管理E:模式管理 特殊表嘌呤核苷酸补救合成途径的主要器官是().A:脑组织B:小肠C:胸腺D:肝脏E:肾脏 示当身嘌呤 ...

  5. java面向对象(类与对象,局部变量成员变量,基本类型和引用类型作为参数传递)...

    一.类和对象的区别 类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体 可以将玩具模型看作是一个类,将一个个玩具看作对象,从玩具模型和玩具之间的关系便可以看出类与对象之间的关系.类用于描述 ...

  6. java中的局部变量、成员变量、类变量

    局部变量:在方法.构造函数或者语句块中定义的变量被称为局部变量. 特点:变量的声明和初始化都是在方法中,方法结束后,变量就会自动销毁. 例:下面代码块的s2 成员变量:成员变量是定义在类中,方法体之外 ...

  7. C#中变量(成员变量、局部变量、全局变量)的作用域

    不管在任何编程语言中都有变量的定义,变量就像是一个容器,不同的变量会在内存中占据不同大小的内存空间.定义变量后会将分配的地址绑定在这个变量名上,以后对该变量名的操作就是对该内存地上存储内容的操作. n ...

  8. C++ static、const和static const类型成员变量声明及其初始化

    C++ static.const和static const类型成员变量声明及其初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. ...

  9. Java中合理使用局部变量替代成员变量、静态变量

    故事起因 一个Java类中可以存在多种形式的变量,可以是最一般的成员变量.或静态变量.或临时变量.如下图: public class VariableDemo {static int staticVa ...

最新文章

  1. NAACL 2021 | 担心GPT-3被喂假消息?谷歌新研究,将知识图谱转成“人话”用于训练...
  2. 高光荣教授逝世:他是新中国首位MIT计算机博士,开创数据流体系结构
  3. 翻译: Oralce官方文档-- Data Blocks, Extents, and Segments
  4. Solr分组聚合查询之Group
  5. JBoss5.x6.x 反序列化漏洞
  6. js 日期对象 31 号 setMonth 的锅
  7. 看动画学算法之:排序-归并排序
  8. websocket中发生数据丢失_什么是WebSocket,它与HTTP有何不同?
  9. php如何判断是否新数据类型,php中如何判断变量的数据类型呢?
  10. view 冒号作用 组件中属性_如何解析名称中带有冒号的JSON?安卓/ Java...
  11. springmvc的ModelAttribute注解
  12. Flocker 做为后端存储代理 docker volume-driver 支持
  13. maven中引用JDK中的tools jar
  14. android 结算权限,如何在Android应用程序中实施应用内结算?
  15. Oracle JDE 系统架构总结..
  16. maikr博客伴侣全新发布,支持博客备份和博客搬家
  17. ThingJS摄像机总结
  18. Uncode-Schedule首页、文档和下载 - 分布式任务调度组件 - 开源中国社区
  19. 争议带货达人董明珠:直播带货476亿 却被质疑经销商刷单
  20. c语言求最小值函数min的用法,C语言--min的宏定义

热门文章

  1. ACM--steps--dyx--5.1.4--find the most comfortable road
  2. php中rowcount 意思,浅谈PDO的rowCount函数
  3. 【微信企业应用】THINKPHP下事件回调echostr验证错误的问题
  4. QQ安装报错0x00008013 与 WPS报错0xc0000142解决办法
  5. http测试 java_[软件测试]HttpUnit-测试用例(例子)[ZZ]
  6. random函数的使用
  7. 尤雨溪:下一代前端构建工具 ViteJS 技术解读
  8. setTimeout定时器
  9. Component和PureComponent的区别
  10. 【Linux】Ubuntu中文输入法的配置和系统时间的设置