Access Static Members Without Any Object

We can access any static member without any object by using the scope resolution operator directly with the class name.

Below is the C++ program to show access to the static member without an object: 

C++




// C++ Program to demonstrate
// static members can be accessed
// without any object
#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;
    }
};
 
// Definition of a
A B::a;
 
// Driver code
int main()
{
  // static member 'a' is accessed
  // without any object of B
  A a = B::getA();
 
  return 0;
}


Output

A's constructor called 

Static Data Members in Local Classes

In C++, we cannot declare static data members in local classes.



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

...