zoukankan      html  css  js  c++  java
  • 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;
        }
        
  • 相关阅读:
    pycharm2018.1下载激活(mac平台)
    python 保存登录状态 cookie
    utf-8和utf-8-sig的区别
    AcWing 803. 区间合并
    AcWing 801. 二进制中1的个数
    AcWing 800. 数组元素的目标和
    AcWing 799. 最长连续不重复子序列
    AcWing 795. 前缀和
    AcWing 791. 高精度加法 解题记录
    九州缥缈录 合集序言
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13721094.html
Copyright © 2011-2022 走看看