Elementi Statici
Gli elementi statici esistono per una intera classe, che sia instanziata o no.
Perciò le variabili static sono uniche, sia che ci siano oggetti di quella
classe che no, e le funzioni static possono essere richiamate senza nessun oggetto.
Variabili Static
Per dichiarare una variabile statica, basta aggiungere la keyword 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.
Funzioni Static
Le funzioni Static esistono e possono essere chiamate senza alcun instanziazione
della classe che le contiene. Quindi, esse possono modificare solo membri statici.
Per dichiarare una funzione static occorre mettere la parola chiave 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