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; } |
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; } |
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.