Statische Member

Statische Member-Variablen

Statische Member-Variablen sind im Prinzip nichts anderes als globale Variablen in C, bis auf die Tatsachen, dass sie im Namensraum einer Klasse liegen und nur einmalig im Speicher repräsentiert werden.

class Math
{
public:
  static double PI = 3.14159265;
};

Statische Member einer Klasse sind auch ohne eine Instanz der Klasse erreichbar. Hier eine normale Funktion (keine Methode), die die statische Membervariable verwendet:

double circumference( double radius )
{
  return 2 * Math::PI * radius;
}

Die einmalige Änderung dieser Variable wirkt sich global auf alle Objekte aus, da alle Instanzen einer Klasse sich diese Variable teilen. Meistens ist es jedoch am sinnvollsten, sie zusätzlich als „const“ zu deklarieren, falls sie Konstanten repräsentieren. Als Alternative bietet sich hier auch das Sprachkonstrukt enum an.

Statische Member-Funktionen

Memberfunktionen sind statisch, also nicht von der Instanz einer Klasse abhängig, entsprechend haben sie keinen Zugriff auf Nicht-Statische-Membervariablen oder Methoden und somit ist auch die Verwendung von this hier nicht möglich. In C sind alle Funktionen statisch.

Statische Memberfunktionen werden einfach mit dem Schlüsselwort static deklariert:

class Math
{
public:
  static double PI = 3,14159265;
 
  static double Circumference( double radius );
};

Eine statische Funktion gehört ebenso in den Namensraum der Klasse und muss entsprechend mit dem ::-Operator der Klasse zugehörig gemacht werden.

double Math::Circumference( double radius );
{
  return 2 * PI * radius;
}

Da die statische Funktion Circumference und PI im gleichen Namensraum liegen, nämlich in Math, kann innerhalb der statischen Funktion PI auch ohne den Zugehörigkeitsoperator verwendet werden. Es wäre hier allerdings ebenso richtig Math::PI zu schreiben.

Auch hier muss beim Zugriff der Namensraum der Klasse genannt werden:

double result;

result = Math::Circumference( 1.0 );

Wir werden später im Tutorial sinnvolle Anwendungen finden, wo statische Funktionen wertvolle Dienste leisten, beispielsweise beim Design Pattern einer Factory.