• 类的静态成员变量和静态成员函数


    1. 静态成员变量

    先来回顾一下普通成员变量

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

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

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

    静态成员变量的定义

    • 静态成员变量在类的内部声明,声明时直接通过static关键字修饰
    • 静态成员变量在类的外部定义与初始化,语法规则为Type ClassName::VarName = value;
    • 静态成员变量不占用类的大小,而是在类外(全局数据区)单独分配空间
    #include <stdio.h>
    
    class Test
    {
    private:
        static int c;
    };
    
    int Test::c = 0;
    

    2. 静态成员函数

    与静态成员变量类似,静态成员函数是类中特殊的成员函数

    • 静态成员函数属于整个类所有
    • 可以通过类名对象名访问public静态成员函数
    • 静态成员函数只能访问静态成员变量和静态成员函数
    class Demo
    {
    public:
        static void StaticFunc(const char *s)
        {
            printf("StaticFunc: %s
    ", s);
        }
    
        static void StaticSetI(Demo &d, int v);
    };
    
    void Demo::StaticSetI(Demo &d, int v)
    {
        d.i = v;
    }
    

    静态成员函数 VS 普通成员函数

    3. 实战练习

    实现如下需求

    • 统计在程序运行期间某个类的对象数目
    • 不能使用全局变量
    • 随时可以获取当前对象的数目
    #include <stdio.h>
    
    class Test
    {
    private:
        static int cCount;
    public:
        Test();
        ~Test();
        static int GetCount();
    };
    
    int Test::cCount = 0;
    
    Test::Test()
    {
        cCount++;
    }
    
    Test::~Test()
    {
        --cCount;
    }
    
    int Test::GetCount()
    {
        return cCount;
    }
    
    int main()
    {
        printf("count = %d
    ", Test::GetCount());
    
        Test t1;
        Test t2;
    
        printf("count = %d
    ", t1.GetCount());
        printf("count = %d
    ", t2.GetCount());
    
        Test *pt = new Test();
    
        printf("count = %d
    ", pt->GetCount());
    
        delete pt;
    
        printf("count = %d
    ", Test::GetCount());
    
        return 0;
    }
    

  • 相关阅读:
    [BZOJ] 3191 [JLOI2013]卡牌游戏
    [LUOGU] P1466 集合 Subset Sums
    [LUOGU] P1113 杂物
    [BZOJ] 1003 [ZJOI2006]物流运输
    poj 2479 最大连续子段和
    C#学习第九弹之委托
    C#学习第八弹之线程基础理解
    C#学习第七弹之WPF
    hdu 2030 汉字的编码方式
    hdu 1559 暴力
  • 原文地址:https://www.cnblogs.com/songhe364826110/p/11546148.html
Copyright © 2020-2023  润新知