Daten- und Funktionselemente einer Klasse können statisch deklariert werden. Ein solches Element existiert dann nur einmal. Alle Objekte einer Klasse teilen es sich (``Klassenspezifische Daten und Funktionen'').
class date
{ int day, month, year;
public:
static int printcount;
static void print_printcount();
void print();
};
void date::print()
{ cout << day << "." << month
<< "." << year << "\n";
printcount++;
}
// Die static-Deklaration ist keine Definition.
// Die erfolgt hier:
int date::printcount = 0;
void date::print_printcount()
{ cout << printcount << "Daten gedruckt";
}
Ein statisches Datenobjekt ist ein separates Objekt. Es existiert auch, wenn kein Objekt seiner Klasse existiert.
Benutzung (objektgebunden oder nicht):
int main(void)
{ date today;
...
cout << today.printcount;
cout << date::printcount;
today.print_printcount();
date::print_printcount();
} /* main */
Vorteil gegenüber globalen Variablen und Funktionen:
Das statische Klassenelement ist global für die Elemente seiner Klasse, beeinflußt den Rest des Programms aber nicht (keine Namenskonflikte).