logo

Statisches Schlüsselwort in C++

Voraussetzung: Statische Variablen in C

Bellford-Algorithmus

Das Schlüsselwort static hat unterschiedliche Bedeutungen, wenn es mit unterschiedlichen Typen verwendet wird. Wir können statische Schlüsselwörter verwenden mit:



    Statische Variablen: Variablen in einer Funktion, Variablen in einer Klasse. Statische Mitglieder einer Klasse: Klassenobjekte und Funktionen in einer Klasse. Schauen wir uns nun jede dieser Verwendungen von Statik im Detail an.

Statische Variablen

Statische Variablen in einer Funktion : Wenn eine Variable als statisch deklariert ist, ist Platz für Es wird für die gesamte Lebensdauer des Programms zugewiesen . Auch wenn die Funktion mehrmals aufgerufen wird, wird der Platz für die statische Variable nur einmal zugewiesen und der Wert der Variablen im vorherigen Aufruf wird beim nächsten Funktionsaufruf übernommen. Dies ist nützlich für die Implementierung von Coroutinen in C/C++ oder anderen Anwendungen, bei denen der vorherige Funktionszustand gespeichert werden muss.

C++








// C++ program to demonstrate> // the use of static Static> // variables in a Function> #include> #include> using> namespace> std;> void> demo()> {> >// static variable> >static> int> count = 0;> >cout << count <<>' '>;> >// value is updated and> >// will be carried to next> >// function calls> >count++;> }> int> main()> {> >for> (>int> i = 0; i <5; i++)> >demo();> >return> 0;> }>

>

>

Ausgabe

0 1 2 3 4>

Sie können im obigen Programm sehen, dass die Variablenanzahl als statisch deklariert ist. Sein Wert wird also durch die Funktionsaufrufe übertragen. Die Variablenanzahl wird nicht bei jedem Aufruf der Funktion initialisiert. Nebenbei bemerkt: Java erlaubt keine statischen lokalen Variablen in Funktionen.

Statische Variablen in einer Klasse : Da die als statisch deklarierten Variablen nur einmal initialisiert werden, da ihnen Speicherplatz in einem separaten statischen Speicher zugewiesen wird, gelten auch die statischen Variablen in einer Klasse werden von den Objekten gemeinsam genutzt. Es können nicht mehrere Kopien derselben statischen Variablen für verschiedene Objekte vorhanden sein. Auch aus diesem Grund können statische Variablen nicht mit Konstruktoren initialisiert werden.

C++




// C++ program to demonstrate static> // variables inside a class> #include> using> namespace> std;> class> GfG {> public>:> >static> int> i;> >GfG(){> >// Do nothing> >};> };> int> main()> {> >GfG obj1;> >GfG obj2;> >obj1.i = 2;> >obj2.i = 3;> >// prints value of i> >cout << obj1.i <<>' '> << obj2.i;> }>

>

>

Ausgabe

undefined reference to `GfG::i' collect2: error: ld returned 1 exit status>

Im obigen Programm können Sie sehen, dass wir versucht haben, mehrere Kopien der statischen Variablen i für mehrere Objekte zu erstellen. Aber das ist nicht passiert. Daher sollte eine statische Variable innerhalb einer Klasse vom Benutzer explizit initialisiert werden, indem der Klassenname und der Bereichsauflösungsoperator außerhalb der Klasse verwendet werden, wie unten gezeigt:

C++




// C++ program to demonstrate static> // variables inside a class> #include> using> namespace> std;> class> GfG {> public>:> >static> int> i;> >GfG(){> >// Do nothing> >};> };> int> GfG::i = 1;> int> main()> {> >GfG obj;> >// prints value of i> >cout << obj.i;> }>

>

Beispiel von
>

Ausgabe

1>

Statische Mitglieder der Klasse

Klassenobjekte als statisch : Genau wie Variablen haben auch Objekte, wenn sie als statisch deklariert sind, einen Gültigkeitsbereich bis zur Lebensdauer des Programms. Betrachten Sie das folgende Programm, bei dem das Objekt nicht statisch ist.

C++


Parallelverarbeitung



// CPP program to illustrate> // when not using static keyword> #include> using> namespace> std;> class> GfG {> >int> i;> public>:> >GfG()> >{> >i = 0;> >cout <<>'Inside Constructor '>;> >}> >~GfG() { cout <<>'Inside Destructor '>; }> };> int> main()> {> >int> x = 0;> >if> (x == 0) {> >GfG obj;> >}> >cout <<>'End of main '>;> }>

>

>

Ausgabe

Inside Constructor Inside Destructor End of main>

Im obigen Programm wird das Objekt innerhalb des if-Blocks als nicht statisch deklariert. Der Gültigkeitsbereich einer Variablen liegt also nur innerhalb des if-Blocks. Wenn also das Objekt erstellt wird, wird der Konstruktor aufgerufen und sobald die Kontrolle über den if-Block über den Destruktor gelangt, wird er aufgerufen, da sich der Gültigkeitsbereich des Objekts nur dort im if-Block befindet, wo es deklariert ist. Sehen wir uns nun die Änderung der Ausgabe an, wenn wir das Objekt als statisch deklarieren.

C++




// CPP program to illustrate> // class objects as static> #include> using> namespace> std;> class> GfG {> >int> i = 0;> public>:> >GfG()> >{> >i = 0;> >cout <<>'Inside Constructor '>;> >}> >~GfG() { cout <<>'Inside Destructor '>; }> };> int> main()> {> >int> x = 0;> >if> (x == 0) {> >static> GfG obj;> >}> >cout <<>'End of main '>;> }>

>

>

Ausgabe

Inside Constructor End of main Inside Destructor>

Sie können die Änderung der Ausgabe deutlich erkennen. Jetzt wird der Destruktor nach dem Ende des Hauptprogramms aufgerufen. Dies geschah, weil der Gültigkeitsbereich statischer Objekte die gesamte Lebensdauer des Programms umfasst.

Statische Funktionen in einer Klasse : Genau wie die statischen Datenelemente oder statischen Variablen innerhalb der Klasse hängen auch statische Elementfunktionen nicht vom Objekt der Klasse ab. Wir dürfen eine statische Member-Funktion mit dem Objekt und dem „.“-Operator aufrufen, es wird jedoch empfohlen, die statischen Member mit dem Klassennamen und dem Bereichsauflösungsoperator aufzurufen. Statische Memberfunktionen dürfen nur auf die statischen Datenmember oder andere statische Memberfunktionen zugreifen , können sie nicht auf die nicht statischen Datenmember oder Memberfunktionen der Klasse zugreifen.

C++




// C++ program to demonstrate static> // member function in a class> #include> using> namespace> std;> class> GfG {> public>:> >// static member function> >static> void> printMsg() { cout <<>'Welcome to GfG!'>; }> };> // main function> int> main()> {> >// invoking a static member function> >GfG::printMsg();> }>

>

Bash-String-Länge

>

Ausgabe

Welcome to GfG!>

In Verbindung stehende Artikel:

  • Quiz zum statischen Schlüsselwort
  • Statische Datenelemente in C++
  • Wann werden statische Objekte zerstört?
  • Interessante Fakten über statische Memberfunktionen
  • Können statische Funktionen virtuell sein?
  • Vergleich des statischen Schlüsselworts in C++ und Java
  • Statische Funktionen in C