class X
{
static int serialno;
public:
X(void);
};
int X::serialno = 0;
X::X(void)
{
serialno++;
cout << "the constructor has been invoked " << serialno << " times." << endl;
}
This rather useless constructor illustrates one important point:
it is possible to use a static data member to keep track of
states that should be shared by all objects of the same class. In many
ways, X::serialno is like a global variable, but its scope is
limited to the methods of X because it is in the private
section.
Note that a static data member of a class, if declared public,
must be accessed in the context of the class, and not of an object.
In other words, if serialno were in the public section,
it can only be accessed as X::serialno, but not myX.serialno,
given that myX is an object of class X.