• 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;
        }
        
  • 相关阅读:
    EffectiveC++ 第4章 设计与声明
    EffectiveC++ 第3章 资源管理
    EffectiveC++ 第2章 构造/析构/赋值运算
    EffectiveC++ 第1章 让自己习惯C++
    C++实现离散数学的关系类,支持传递闭包运算
    Vi编辑器入门
    如何查看jdk的版本是32位还是64位
    跨域服务调用基本概念及解决方法
    解决MyEclipse不编译的方法
    网上拒绝复制方法解决
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13721094.html
Copyright © 2020-2023  润新知