C++-Programmierung/ Im Zusammenhang mit Klassen/ Statische Methoden

Aus Wikibooks
Zur Navigation springen Zur Suche springen


Statische Inhalte einer Klasse sind im gleichen Ausführungsobjekt

  • in allen Instanzen dieser Klasse gleich.
  • auch verfügbar, wenn keine Instanz der Klasse existiert.

Eine statische Methode wird mit dem Speicherklassenschlüsselwort static deklariert.

Dies gilt auch für statische Mitgliedsmethoden.

Im aktuellen Abschnitt ist mit statische Methode immer eine statische Mitglieds-Methode einer Klasse gemeint.

Statische Methoden können auf statische Mitglieder der Klasse, in der sie deklariert werden, zugreifen. Nicht-statische Inhalte dürfen nicht von der Methode aus verwendet werden, da die Methode auch ohne eine Instanz gültig ist. Auch wenn ein Objekt verwendet wird und über das Objekt die statische Methode aufgerufen wird, wird der statische Programmcode verwendet.

Im Beispiel wird nun eine statische Methode deklariert und in einer Beispielfunktion dreimal verwendet. Beachten Sie, dass die Zuweisungen von p1, p2, p3 immer dieselbe statische Funktion aufrufen.

Nuvola-inspired-terminal.svg
 1 class Q{
 2 public:
 3   static char *gibVierKiloByte(void);
 4 };
 5 
 6 void f( Q &rQ, Q *pQ ){
 7   char *p1 = Q::gibVierKiloByte(); // Aufruf ohne Objekt
 8   char *p2 = rQ.gibVierKiloByte(); // Aufruf über referenziertes Objekt
 9   char *p3 = pQ->gibVierKiloByte(); // Aufruf über Zeiger auf Objekt
10 };

Die zweite und dritte Aufruf-Variante sollte vermieden werden, da man sie als Andeutung verstehen könnte, dass hier eine nicht-statische Methode aufgerufen würde.


Ein weiteres Beispiel, welches zeigt wie man statische Membermethoden und Membervariablen dazu verwenden könnte, um die Anzahl der erzeugten Instanzen/Objekte der Klasse zu bestimmen:

Nuvola-inspired-terminal.svg
 1 #include <iostream>
 2 using namespace std;
 3 
 4 
 5 class Tier{
 6 public:
 7     Tier();
 8     static int getAnzahl();
 9     // statische Membermethode kann auf nur
10     // statische Membervariablen zugreifen
11 
12 private:
13     static int anz;
14 };
15 
16 
17 // Initialisierung der statischen Membervariablen
18 int Tier::anz = 0;
19 
20 Tier::Tier(){
21     ++ anz;
22 }
23 
24 int Tier::getAnzahl(){
25     return anz;
26 }
27 
28 int main(){
29     // Selbst wenn noch keine Instanzen auf
30     // Klasse Tier sind kann man schon
31     // die statische Membermethode aufrufen
32     cout << Tier::getAnzahl() << endl;
33 
34     Tier t1;
35     cout << Tier::getAnzahl() << endl;
36 
37     Tier t2, t3;
38     cout << Tier::getAnzahl() << endl;
39 
40     cin.peek();
41 }
Crystal Clear app kscreensaver.svg
Ausgabe:
1 0
2 1
3 3