static
all'inizio della dichiarazione. Dopo averla dichiarata, occorre anche che ci sia una
sua definizione in un file di codice. Ogni istanza della classe farà riferimento
alla stessa variabile static.
// A.h class A { static int number; public: A() { number++; } ~A() { number--; } }; // A.C #include "A.h" int A::number = 0;In questo esempio, la variabile interna
number
viene usata per contare
il numero di oggetti della classe A che sono attualmente in memoria.
Le stesse regole di protezione che si applicano ai normali membri si applicano
anche a quelli static. Un membro private
può essere solo
inizializzato, come nell'esempio precedente, una variabile public
invece può essere anche modificata.
static
prima della sua dichiarazione.
class A { static int number; public: A() { number++; } ~A() { number--; } static int GetNumber(); }; int A::GetNumber() { return number; }Dopodichè puoi chiamare anche normalmente una funzione statica, usando un oggetto, cioè invocandola su un oggetto. Ma si può chiamare una funzione static anche senza invocarla su alcun oggetto. Basta mettere il nome della classe seguito da un "::" e dal nome della funzione:
A a_obj; int n; n = a_obj.GetNumber(); // Normale chiamata n = A::GetNumber(); // Non occorre passare alcun oggetto