类中static变量和成员变量

类中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 修饰符(语法规定)。

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Drdajie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值