### Example of Static Data Members

    /************************************************************************
    *

The following example shows the declaration, initialization, use, and scope of the static data member si and static member functions Set_si(int) and Print_si().

                                                                            *
    ************************************************************************/

    // This example shows the declaration, initialization,
    // use, and scope of a static data member.

    #include <iostream.h>
    class X
    {
          int i;
          static int si;
    public:
          void Set_i(int i) { this->i = i; }
          void Print_i() { cout << "i = " << i << endl; }
          // Equivalent to:
          // void Print_i(X* this)
          // { cout << "X::i = " << this->i << endl; }
          static void Set_si(int si) { X::si = si; }

          static void Print_si()
          {
                cout << "X::si = " << X::si << endl;
          }
          // Print_si doesn't have a 'this' pointer
    };
    int X::si = 77;       // Initialize static data member

    void main()
    {
          X xobj;
          // Non-static data members and functions belong to specific
          // instances (here xobj) of class X
          xobj.Set_i(11);
          xobj.Print_i();

          // static data members and functions belong to the class and
          // can be accessed without using an instance of class X
          X::Print_si();
          X::Set_si(22);
          X::Print_si();
    }

    /************************************************************************
    *

This example produces the following output:

    i = 11
    X::si = 77
    X::si = 22

                                                                            *
    ************************************************************************/