C++ Statische Klassenmitglieder

C++ Klassen und Objekte

Wir könnenstatic verwenden.Das Schlüsselwort wird verwendet, um Klassenmitglieder als statisch zu definieren. Wenn wir ein Klassenmitglied als statisch deklarieren, bedeutet dies, dass unabhängig davon, wie viele Objekte der Klasse erstellt werden, nur eine Kopie des statischen Mitglieds vorhanden ist.

Statische Mitglieder werden von allen Objekten der Klasse gemeinsam genutzt. Wenn keine anderen Initialisierungsanweisungen vorhanden sind, werden alle statischen Daten beim Erstellen des ersten Objekts auf Null initialisiert. Wir können die Initialisierung statischer Mitglieder nicht innerhalb der Klassendefinition platzieren, aber wir können sie außerhalb der Klasse mit dem Bereichsauflösungsoperator durchführen.::Um die statische Variable neu zu deklarieren, um sie zu initialisieren, wie im folgenden Beispiel gezeigt.

Das folgende Beispiel hilft, das Konzept der statischen Mitgliedsdaten besser zu verstehen:

Beispiel

#include <iostream> using namespace std; class Box { public: static int objectCount; // Konstruktordefinition Box(double l=2.0, double b=2.0, double h=2.0) { cout <<"Konstruktor aufgerufen." << endl; length = l; breadth = b; height = h; // Bei jeder Objekterstellung um 1 erhöhen objectCount++; } double Volume() { return length * breadth * height; } private: double length; // Länge double breadth; // Breite double height; // Höhe }; // Statisches Element der Klasse Box initialisieren int Box::objectCount = 0; int main(void) { Box Box1(3.3, 1.2, 1.5); // box1 deklarieren Box Box2(8.5, 6.0, 2.0); // box2 deklarieren // Gesamtzahl der Objekte ausgeben cout << "Gesamtanzahl Objekte: " << Box::objectCount << endl; return 0; }

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

Constructor called.
Constructor called.
Total objects: 2

Statische Elementfunktionen

Wenn eine Elementfunktion als static deklariert wird, kann sie unabhängig von einem bestimmten Objekt der Klasse gemacht werden. Statische Elementfunktionen können aufgerufen werden, selbst wenn kein Objekt der Klasse existiert,Statische FunktionenVerwenden Sie einfach den Klassennamen zusammen mit dem Bereichsauflösungsoperator::dann können wir darauf zugreifen.

Statische Elementfunktionen können nur auf statische Datenelemente, andere statische Elementfunktionen und andere Funktionen außerhalb der Klasse zugreifen.

Statische Elementfunktionen haben Klassen-Gültigkeitsbereich; sie können nicht auf den this-Zeiger der Klasse zugreifen. Sie können statische Elementfunktionen verwenden, um festzustellen, ob bestimmte Objekte der Klasse erstellt wurden.

Unterschiede zwischen statischen Elementfunktionen und gewöhnlichen Elementfunktionen:

  • Statische Elementfunktionen besitzen keinen this-Zeiger und können nur auf statische Elemente zugreifen (einschließlich statischer Datenelemente und statischer Elementfunktionen).
  • Gewöhnliche Elementfunktionen besitzen einen this-Zeiger und können auf jedes Mitglied der Klasse zugreifen; statische Elementfunktionen besitzen keinen this-Zeiger.

Das folgende Beispiel hilft, das Konzept der statischen Elementfunktionen besser zu verstehen:

Beispiel

#include <iostream> using namespace std; class Box { public: static int objectCount; // Konstruktordefinition Box(double l=2.0, double b=2.0, double h=2.0) { cout <<"Konstruktor aufgerufen." << endl; length = l; breadth = b; height = h; // Bei jeder Objekterstellung um 1 erhöhen objectCount++; } double Volume() { return length * breadth * height; } static int getCount() { return objectCount; } private: double length; // Länge double breadth; // Breite double height; // Höhe }; // Statisches Mitglied der Klasse Box initialisieren int Box::objectCount = 0; int main(void) { // Gesamtzahl der Objekte vor dem Erstellen von Objekten ausgeben cout << "Anfängliche Anzahl: " << Box::getCount() << endl; Box Box1(3.3, 1.2, 1.5); // Box1 deklarieren Box Box2(8.5, 6.0, 2.0); // box2 deklarieren // Gesamtzahl der Objekte nach dem Erstellen von Objekten ausgeben cout << "Endgültige Anzahl: " << Box::getCount() << endl; return 0; }

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

Inital Stage Count: 0
Constructor called.
Constructor called.
Final Stage Count: 2

C++ Klassen und Objekte

Weitere Erweiterungen