服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++分析讲解类的静态成员变量是什么

C++分析讲解类的静态成员变量是什么

2022-11-14 13:58清风自在 流水潺潺 C/C++

在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存

一、成员变量的回顾

  • 通过对象名能够访问 public 成员变量
  • 每个对象的成员变量都是专属的
  • 成员变量不能在对象之间共享

 

二、新的需求

  • 统计在程序运行期间某个类的对象数目
  • 保证程序的安全性(不能使用全局变量)
  • 随时可以获取当前对象的数目

下面来看示例:

#include <stdio.h>
int gCount = 0; 
class Test
{
private:
  int mCount;
public:
  Test() : mCount(0)
  {
      gCount++;
  }
  ~Test()
  {
      --gCount;
  }
  int getCount()
  {
      return gCount;
  }
};
Test gTest;
int main()
{
  Test t1;
  Test t2;
  printf("count = %d\n", gTest.getCount());
  printf("count = %d\n", t1.getCount());
  printf("count = %d\n", t2.getCount());
  return 0;
}

输出结果如下:

C++分析讲解类的静态成员变量是什么

虽然这段代码可以获得当前定义对象的数量,但是使用了全局变量,不能保证程序的安全性,那么有什么好的办法呢?且看下面。

 

三、静态成员变量

在 C++ 中可以定义静态成员变量

  • 静态成员变量属于整个类所有
  • 静态成员变量的生命期不依赖于任何对象
  • 可以通过类名直接访问公有静态成员变量
  • 所有对象共享类的静态成员变量
  • 可以通过对象名访问公有静态成员变量

静态成员变量的特性

  • 在定义时直接通过 static 关键字修饰
  • 静态成员变量需要在类外单独分配空间
  • 静态成员变量在程序内部位于全局数据区

语法规则:

Type ClassName:VarName = value;

下面来看一下静态成员变量的使用:

#include <stdio.h>
class Test
{
private:
  static int cCount;
public:
  Test()
  {
      cCount++;
  }
  ~Test()
  {
      --cCount;
  }
  int getCount()
  {
      return cCount;
  }
};
int Test::cCount = 0;
Test gTest;
int main()
{
  Test t1;
  Test t2;
  printf("count = %d\n", gTest.getCount());
  printf("count = %d\n", t1.getCount());
  printf("count = %d\n", t2.getCount());
  Test* pt = new Test();
  printf("count = %d\n", pt->getCount());
  delete pt;
  printf("count = %d\n", gTest.getCount());
  return 0;
}

输出结果如下:

C++分析讲解类的静态成员变量是什么

Test* pt = new Test(); 动态在堆空间生成了一个 test 对象,所以会触发构造函数的调用,所以 count 变成了 4,delete pt; 后 count 就变成 3 了。

 

四、小结

  • 类中可以通过 static 关键定义静态成员变量
  • 静态成员变量隶属于类所有
  • 每一个对象都可以访问静态成员变量
  • 静态成员变量在全局数据区分配空间
  • 静态成员变量的生命期为程序运行期

到此这篇关于C++分析讲解类的静态成员变量是什么的文章就介绍到这了,更多相关C++静态成员变量内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_43129713/article/details/124260197

延伸 · 阅读

精彩推荐
  • C/C++基于VC实现的网络监听功能程序实例

    基于VC实现的网络监听功能程序实例

    这篇文章主要介绍了基于VC实现的网络监听功能程序,需要的朋友可以参考下...

    C语言程序设计6812021-01-24
  • C/C++C++将txt文件内容保存到数组的方法

    C++将txt文件内容保存到数组的方法

    今天小编就为大家分享一篇C++将txt文件内容保存到数组的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    scopion_wang9442021-06-30
  • C/C++C++实现哈夫曼编码

    C++实现哈夫曼编码

    这篇文章主要为大家详细介绍了C++实现哈夫曼编码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    南小呗11512021-09-03
  • C/C++C语言实现一个通讯录

    C语言实现一个通讯录

    这篇文章主要为大家详细介绍了用C语言实现一个通讯录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    persistence_s7972021-06-20
  • C/C++手把手带你学习C++的数据类型

    手把手带你学习C++的数据类型

    这篇文章主要为大家介绍了C++的数据类型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助,希望能够给你带来帮助...

    Eric_Yihan12152022-03-02
  • C/C++C/C++使用C语言实现多态

    C/C++使用C语言实现多态

    这篇文章主要介绍了C/C++多态的实现机制理解的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下,希望能给你带来帮助...

    久病成良医6932021-12-18
  • C/C++C++实践数组作数据成员的参考

    C++实践数组作数据成员的参考

    今天小编就为大家分享一篇关于C++实践数组作数据成员的参考,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编...

    迂者-贺利坚5062021-07-22
  • C/C++Qt 信号自定义槽函数的实现

    Qt 信号自定义槽函数的实现

    Qt中实现自定义信号与槽函数,信号用于发送并触发槽函数,槽函数则是具体的功能实现,本文就详细的介绍一下如何使用,感兴趣的可以了解一下...

    lyshark5062022-03-05