Why / When should I use a member of the data class without defining an object of the class?

advertisements

It is possible in C++ to use a data member of a class without defining an object of that class, by defining that data member in the public section as a static variable, as in the code sample below. The question is, why/when would I want to do this? and how can I do it?

class ttime{
public:
    ttime(int h=0, int m=0, int s=0):hour(h), minute(m), second(s){}   //constructor with default intialization
    int& warning(){return hour;}
    void display()const{cout<<hour<<"\t";}
    static int hello;
    ~ttime(){}

private:
    int hour;
    int minute;
    int second;
};

main()
{
    ttime:: hello=11310; //Is this the way to use hello without creating an object of the class?
    cout << ttime:: hello;

    ttime hi(9);
    hi.display();
    hi.warning()++;//the user is able to modify your class's private data, which is really bad! You should not be doing this!
    hi.display();
}


As cited before, static member variables work as 'global' variables, but within the class namespace. So it is useful for counters or shared resources between objects.

In the case of 'public static' modifier, it is easy to see its use within libraries to provide access to constants and general-purpose functionality (static methods).

For example, an input library might have:

class KeyEvent
{
    public:
      static const int KEY_DOWN = 111;
      static const int KEY_UP = 112;
      ...
}

//And then in your code
#include <KeyEvent>

void poolEvent(Key *key)
{
    if(key->type() == KeyEvent::KEY_DOWN)
      ...
}