Membres statiques d'une classe en C++
Nous pouvons définir des membres de classe statiques à l'aide d'un mot clé static. Lorsque nous déclarons un membre d'une classe comme statique, cela signifie que quel que soit le nombre d'objets de la classe créés, il n'existe qu'une seule copie du membre statique.
Un membre statique est partagé par tous les objets de la classe. Toutes les données statiques sont initialisées à zéro lors de la création du premier objet si aucune autre initialisation n'est présente.
Nous ne pouvons pas initialiser un membre statique dans la définition de classe, mais celle-ci peut être initialisée en dehors de la classe, comme dans l'exemple suivant en redéclarant la variable statique à l'aide de l'opérateur de résolution de portée :: pour identifier la classe à laquelle elle appartient.
Exemple :
class Voiture { private: int Id; double Vitesse; public: static int nbVoitures; Voiture(); }; int Voiture::nbVoitures = 0; // intialisation Voiture::Voiture() { Id = 1; Vitesse = 240; }
Fonction membre statique
En déclarant une fonction membre comme statique, vous la rendez indépendante de tout objet particulier de la classe. Une fonction membre statique peut être appelée même s'il n'y a pas d'objets de la classe. Les fonctions statiques sont accessibles uniquement à l'aide du nom de la classe et de l'opérateur de résolution de portée "::".
Une fonction membre statique ne peut accéder qu’à un membre de données statique, à d’autres fonctions membres statiques et à toute autre fonction extérieure à la classe.
Les fonctions membres statiques ont une portée de classe et elles n'ont pas accès au pointeur this de la classe. Vous pouvez utiliser une fonction membre static pour déterminer si certains objets de la classe ont été créés ou non.
Exemple :
#include <iostream> using namespace std; class Voiture { private: int Id; double Vitesse; public: static int nbVoitures; Voiture(); static int getNombreObjets(); }; int Voiture::nbVoitures = 0; int Voiture::getNombreObjets() { return nbVoitures; } Voiture::Voiture() { Id = 1; Vitesse = 240; nbVoitures += 1; } int main() { Voiture v1, v2, v3, v4; cout << "Nombre d'objets : " << Voiture::getNombreObjets() << endl; return 0; }
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant