Friday, February 5, 2010

Uses of static class data

1. To provide access control mechanism to some shared resource used by all the objects of a class
2. To keep track of no of objects in existence of a particular class
Following example illustrates first case, to make use of static data member for access control:
#include
using namespace std;
class MyClass
{
         static int resource;
         public:
              int get_resource()
              {
                   if (resource)
                       return 0;
                   else
                   {
                         resource = 1;
                         return 1;
                   }
                }
             void free_resource()
              {
                      resource =0;
              }
};
int MyClass::resource;
int main()
{
           MyClass ob1, ob2;
           if(ob1.get_resource())
                  cout <<”Resources with ob1”;
           if(!ob2.get_resource())
                  cout <<”Resources denied to ob2”;
           ob1.free_resource();
           return 0;
}
Thus, the static member variable resource makes sure at a time only one object can access it.
Now, consider the second use: to keep track of no of objects:
#include
using namespace std;
class MyClass
{
          public:
           static int cnt; 
           MyClass() 
           { 
                  cnt++; 
           } 
           ~MyClass() 
           { 
                   cnt--; 
           } 
};
void func() 
{ 
          MyClass temp; 
          cout << “No of Objects : “<< MyClass::cnt<<”\n”; 
} 
int MyClass::cnt;
int main()
{
         cout <<”Entered main()\n”:
         MyClass ob1;
         cout << “No of Objects : “<< MyClass::cnt <<”\n”;
        MyClass ob2;
         cout << “No of Objects : “<< MyClass::cnt<<”\n”;

         func();
          cout << “No of Objects : “<< MyClass::cnt<<”\n”;
    return 0;
}
Output would be:
Entered main()
No of Objects: 1
No of Objects: 2
No of Objects: 3
No of Objects: 2
Thus, only one copy of static member variable cnt is maintained for all the objects created and its value is incremented or decremented whenever and object is created or destroyed.

0 Comments: