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

C++