En C++, le mot-clé static peut être appliqué aux données membres et aux fonctions membres d'une classe. Un membre statique n'appartient pas à un objet particulier : il est partagé par toutes les instances de la classe.
Données membres statiques
static est unique pour toute la classe : quelle que soit le nombre d'objets créés, il n'en existe qu'une seule copie en mémoire, partagée par tous les objets. Il est initialisé à 0 par défaut si aucune valeur n'est spécifiée.::.Exemple — compteur d'instances
class Voiture
{
private:
int Id;
double Vitesse;
public:
static int nbVoitures; // déclaration du membre statique
Voiture();
};
// initialisation en dehors de la classe (obligatoire)
int Voiture::nbVoitures = 0;
Voiture::Voiture()
{
Id = 1;
Vitesse = 240;
}Fonctions membres statiques
static est indépendante de tout objet. Elle peut être appelée directement via le nom de la classe, sans créer d'instance : NomClasse::nomFonction().Une fonction statique a les contraintes suivantes :
- Elle ne peut accéder qu'aux membres statiques de la classe (données et fonctions statiques).
- Elle n'a pas accès au pointeur
this(puisqu'elle n'est liée à aucun objet particulier). - Elle peut accéder à des fonctions ou variables extérieures à la classe.
Exemple complet — compteur global d'objets
#include <iostream>
using namespace std;
class Voiture
{
private:
int Id;
double Vitesse;
public:
static int nbVoitures;
Voiture()
{
Id = 1;
Vitesse = 240;
nbVoitures += 1; // incrémentation à chaque création
}
// fonction statique : accessible sans objet
static int getNombreObjets()
{
return nbVoitures;
}
};
// Initialisation du membre statique
int Voiture::nbVoitures = 0;
int main()
{
Voiture v1, v2, v3, v4;
// appel via le nom de la classe, sans objet
cout << "Nombre de voitures créées : "
<< Voiture::getNombreObjets() << endl;
return 0;
}Nombre de voitures créées : 4
Comparaison membre normal vs membre statique
| Caractéristique | Membre normal | Membre statique |
|---|---|---|
| Nombre de copies | Une par objet | Une seule pour toute la classe |
| Appartient à | Un objet spécifique | La classe entière |
| Accès via | objet.membre | NomClasse::membre |
Accès au pointeur this | Oui | Non |
| Peut accéder aux membres non-statiques | Oui | Non |
| Initialisation | Dans le constructeur | En dehors de la classe |
- Compter le nombre d'objets créés (compteur global)
- Partager une configuration commune à tous les objets
- Implémenter le patron de conception Singleton (instance unique)
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.