Accessing a Static Member

As told earlier, the static members are only declared in the class declaration. If we try to access the static data member without an explicit definition, the compiler will give an error. 

Below is the C++ program to show when static member ‘a’ is accessed without explicit definition:

C++




// C++ Program to demonstrate
// the Compilation Error occurred
// due to violation of Static
// Data Memeber Rule
#include <iostream>
using namespace std;
 
class A {
    int x;
 
public:
    A()
    {
      cout << "A's constructor called " <<
               endl;
    }
};
 
class B {
    static A a;
 
public:
    B()
    {
      cout << "B's constructor called " <<
               endl;
    }
    static A getA()
    {
      return a;
    }
};
 
// Driver code
int main()
{
    B b;
    A a = b.getA();
    return 0;
}


Output

Compiler Error: undefined reference to `B::a' 

Explanation: Here static member ‘a’ is accessed without explicit definition. If we add the definition, the program will work fine and call A’s constructor. 

C++ Static Data Members

Static data members are class members that are declared using static keywords. A static member has certain special characteristics which are as follows:

  • Only one copy of that member is created for the entire class and is shared by all the objects of that class, no matter how many objects are created.
  • It is initialized before any object of this class is created, even before the main starts.
  • It is visible only within the class, but its lifetime is the entire program.

Syntax:

static data_type data_member_name;

Below is the C++ program to demonstrate the working of static data members:

C++




// C++ Program to demonstrate
// the working of static data member
#include <iostream>
using namespace std;
 
class A {
public:
    A()
    {
      cout << "A's Constructor Called " <<
               endl;
    }
};
 
class B {
    static A a;
 
public:
    B()
    {
      cout << "B's Constructor Called " <<
               endl;
    }
};
 
// Driver code
int main()
{
    B b;
    return 0;
}


Output

B's Constructor Called 

Explanation: The above program calls only B’s constructor, it doesn’t call A’s constructor. The reason is,

Static members are only declared in a class declaration, not defined. They must be explicitly defined outside the class using the scope resolution operator.

Similar Reads

Accessing a Static Member

...

Defining Static Data Member

As told earlier, the static members are only declared in the class declaration. If we try to access the static data member without an explicit definition, the compiler will give an error....

Access Static Members Without Any Object

...