• 17 类的静态成员变量


    1 成员变量回顾

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

    2 新的需求

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

    3 解决方法

    • 方案1

      • Demo

        #include <stdio.h>
        
        class Test
        {
        private:
            int mCount;
        public:
            Test() : mCount(0) {
                mCount++;
            }
            ~Test() {
                --mCount;
            }
            int getCount() {
                return mCount;
            }
        };
        
        Test gTest;
        
        int main()
        {
            Test t1;
            Test t2;
            
            printf("count = %d
        ", gTest.getCount());  // 1
            printf("count = %d
        ", t1.getCount());     // 1
            printf("count = %d
        ", t2.getCount());     // 1
            
            return 0;
        }
        
    • 方案2:静态成员变量

    4 静态成员变量

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

      • 静态成员变量属于整个类
      • 静态成员变量的生命周期不依赖于任何对象 => 程序的运行时期
      • 可以通过类名直接访问公有静态成员变量
      • 所有对象共享类的静态成员变量
      • 可以通过对象名访问公有静态成员变量
    • 静态成员变量的特性

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

      Type ClassName:VarName = value;

    • 示例:静态成员变量的使用

      • Demo

        #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
        ", gTest.getCount());  // 3
            printf("count = %d
        ", t1.getCount());     // 3
            printf("count = %d
        ", t2.getCount());     // 3
            
            Test* pt = new Test();
            
            printf("count = %d
        ", pt->getCount());    // 4
            
            delete pt;
            
            printf("count = %d
        ", gTest.getCount());  // 3
            
            return 0;
        }
        
  • 相关阅读:
    栈溢出笔记1.3 准备Shellcode
    聊聊手游的那些惊喜与惊吓
    GIS+=地理信息+容器技术(4)——Docker执行
    与AQS有关的并发类
    HDU 2102 A计划
    生产系统ELK日志采集系统
    datagrip离线安装驱动jar
    oracle无效索引重建
    18年总结及19年展望
    shell符号解释
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13721094.html
Copyright © 2020-2023  润新知