What are static members in C++?

In C++, static members in a class bring a cool idea of sharing stuff among all objects, like friends sharing toys. When we talk about static data members, we mean things in the class that are declared using the static keyword.

Characteristics of static data members

  • When a data member is declared as static, only one variable is created in the memory, even there are many objects of that class.

  • Initialization occurs before any object of the class is created, even preceding the initiation of the main function.

  • While visibility is restricted to the class, the static member’s lifespan extends throughout the entire program.

  • A static data item is useful when all objects of the same class must share a common item of information.

Syntax

The following is the syntax of static members in C++:

static dataType variableName; // dataType can be int float double string etc

Think of static members like a shared notebook for a group of friends. Suppose each friend is an object of a class. A static member is like a note in the notebook that everyone can see. We might use it to keep track of how many times something happens, like counting each time a friend joins a gathering. It’s a way to share and remember common things among all the friends.

#include <iostream>
using namespace std;
class MyClass {
public:
static int sharedVariable;
int nonStaticMemberA;
int nonStaticMemberB;
MyClass()
{
nonStaticMemberA=10;
nonStaticMemberB=20;
}
void printData() {
cout << "Shared Variable: " << sharedVariable << endl;
cout << "Non-Static Member A: " << nonStaticMemberA << endl;
cout << "Non-Static Member B: " << nonStaticMemberB << endl;
}
};
int MyClass::sharedVariable = 100; // Definition and initialization
int main() {
MyClass objectA;
MyClass objectB;
MyClass objectC;
// Print data for each object
cout << "Data for Object A:" << endl;
objectA.printData();
cout << "\nData for Object B:" << endl;
objectB.printData();
cout << "\nData for Object C:" << endl;
objectC.printData();
return 0;
}
  • Lines 3–19: We create MyClass which has three members:

    • sharedVariable: A static integer shared by all instances of the class.

    • nonStaticMemberA and nonStaticMemberB: Non-static integers specific to each instance of the class.

A constructor is defined to initialize nonStaticMemberA to 10 and nonStaticMemberB to 20 for each object created.

    • printData(): This function prints the data of all variables in the class.

  • Line 14: Static member sharedVariable is initialized to 100.

  • Lines 16–18: Three objects objectA, objectB, and objectC of the class MyClass are created.

Let’s understand the above program with the help of the diagram:

Shared Variable
Shared Variable

This code illustrates the concept of static and non-static members in a class. Each object of MyClass has its own nonStaticMemberA and nonStaticMemberB, but they all share the same sharedVariable due to its static nature. When we create objects like objectA, objectB, and objectC, the non-static members get specific values, while the static members remain common among all instances.

Use cases

  • Counters and trackers: Static data members are perfect for maintaining counts or trackers shared among instances, such as tracking the number of objects created.

  • Utility functions: Static member functions provide a home for utility functions that don’t rely on individual object states but are relevant to the class as a whole.

  • Resource management: When dealing with resources shared across instances, static members help in efficient resource management.

Conclusion

Static members in C++ provide a powerful mechanism for sharing common data and functionality among all instances of a class. By allowing variables and functions to be shared across objects, static members facilitate efficient resource management, tracking, and utility functions within a class. Understanding the characteristics and syntax of static members enhances the versatility and effectiveness of C++ programming, enabling developers to design more organized and robust software solutions.

Free Resources

Copyright ©2025 Educative, Inc. All rights reserved