#include <iostream>

class NonStaticVariable
{
    public:
        NonStaticVariable();
        unsigned int get_count();
        void decrement_count();
    private:
        unsigned int count;
};

class StaticVariable
{
    public:
        StaticVariable();
        unsigned int get_count();
        void decrement_count();
    private:
        static unsigned int count;
};

unsigned int StaticVariable::count = 0;

NonStaticVariable::NonStaticVariable()
{
    this->NonStaticVariable::count = 0;
    ++this->NonStaticVariable::count;
}

unsigned int NonStaticVariable::get_count()
{
    return this->NonStaticVariable::count;
}

void NonStaticVariable::decrement_count()
{
    --this->NonStaticVariable::count;
}

StaticVariable::StaticVariable()
{
    ++this->StaticVariable::count;
}

unsigned int StaticVariable::get_count()
{
    return this->StaticVariable::count;
}

void StaticVariable::decrement_count()
{
    --this->StaticVariable::count;
}

int main(int argc, char *argv[])
{
    // I will create two `NonStaticVariable` objects, but the count of each one will be just 1, and if I decrement the count of one of them, then one will have a count of 0 and the other will have a count of 1.
    NonStaticVariable Var1, Var2;
    std::cout << Var1.get_count() << " " << Var2.get_count() << std::endl;
    Var1.decrement_count();
    std::cout << Var1.get_count() << " " << Var2.get_count() << std::endl;

    // I will create two `StaticVariable` objects, and since their `count` member variable is shared, the count of both will be equal to two, and if I decrement the count of one of them, then both will be equal to one.
    StaticVariable Var3, Var4;
    std::cout << Var3.get_count() << " " << Var4.get_count() << std::endl;
    Var3.decrement_count();
    std::cout << Var3.get_count() << " " << Var4.get_count() << std::endl;
    return 0;
}
