C++ static

Die Bedeutung von statischen Elementen in C und C++, dessen Verwendung und Programmierung.



In C und C++ können Variablen, Konstanten und Funktionen als >>static<< (statisch) definiert werden.

Dies bewirkt, dass mit >>static<< deklarierte Elemente pro Klasse nur einmal existieren und nicht wie üblich einmal für jede Instanz angelegt werden.

* statische Funktionen sind nur innerhalb des Quelltextes sichtbar
* statische Variablen und Konstanten behalten auch zwischen Funktionsaufrufen ihren Wert bei. So können etwa statische Variablen dazu verwendet werden um die Anzahl der erstellten Instanzen ihrer Klasse zu zählen.


// Definition einer modulglobalen Variablen
static int modVar;
 
// Definition einer modulglobalen Funktion bzw. Methode
static void *function(void)
Da statische Funktionen, Variablen und Konstanten unabhängig einer Instanz existieren, sind diese während der gesamten Programmlaufzeit gültig. Sie weißen somit alle Merkmale von >>globalen Variablen<< auf, sind aber - falls private deklariert - nur innerhalb ihrer Klasse sichtbar.


Um von außerhalb auf ein statisches Element zuzugreifen, gibt es zwei Möglichkeiten:

1. Objekt existiert
objekt.staticVar
bzw.
objekt.staticFunction()

2. kein Objekt existiert
Klasse::staticVar
bzw.
Klasse::staticFunction()

// Klasse.h
class Klasse
{
  static int staticVar;
  static void staticFunction();
};
 
 
 
// Klasse.cpp
int Klasse::staticVar = 100;
Klasse::staticFunction();
 
// Programmbeispiel eines Funktionspointers mit statischen Methoden
static char *func1(void)
{
  return "function1";
}
 
static char *func2(void)
{
  return "function2";
}
 
 
int main( int argc, char *argv[] )
{
  // Funktionspointer
  char *(*get) (void);
 
  // Funktionsaufruf Nr.1
  get = func1;
  printf("%s
", get() ); // gibt function1 aus  
 
  // Funktionsaufruf Nr.2
  get = func2;
  printf("%s
", get() ); // gibt function2 aus
 
 
  return0;
}
Das Programm ruft über ein und denselben Aufruf (in unserem Fall get() ) die beiden Methoden func1() und func2() auf.