Statische Memberfunktionen
Statische Memberfunktionen werden als Funktionen mit Klassengültigkeitsbereich betrachtet. Im Gegensatz zu nicht statischen Memberfunktionen haben diese Funktionen kein implizites this-Argument. Daher können sie nur statische Datenmember, Enumeratoren oder geschachtelte Typen direkt verwenden. Auf statische Memberfunktionen kann ohne ein Objekt einer entsprechenden Klasse zugegriffen werden. Betrachten Sie das folgende Beispiel:
Beispiel
// static_member_functions.cpp
#include <stdio.h>
class StaticTest
{
private:
static int x;
public:
static int count()
{
return x;
}
};
int StaticTest::x = 9;
int main()
{
printf_s("%d\n", StaticTest::count()); // 9
}
Kommentare
Im vorherigen Code enthält die Klasse StaticTest die statische Memberfunktion count. Diese Funktion gibt den Wert des privaten Klassenmembers zurück, ist jedoch nicht unbedingt einem angegebenen Objekt vom Typ StaticTest zugeordnet.
Statische Memberfunktionen haben eine externe Bindung. Diese Funktionen haben diese Zeiger nicht. Daher gelten für solche Funktionen folgende Einschränkungen:
Sie können nicht mithilfe von Memberauswahloperatoren (. oder –>) auf Daten nicht statischer Klassenmember zugreifen.
Sie können nicht als virtual deklariert werden.
Ihr Name kann nicht mit dem einer nicht statischen Funktion identisch sein, die dieselben Argumenttypen aufweist.
Hinweis
Die linke Seite eines Memberauswahloperators (. oder –>), der eine statische Memberfunktion auswählt, wird nicht ausgewertet.Dies kann wichtig sein, wenn die Funktion aufgrund ihrer Nebeneffekte verwendet wird.Beispielsweise ruft der Ausdruck SideEffects().CountOf() die Funktion SideEffects nicht auf.