Membres statiques d'une classe en C++

26 Sep 2019 26 Sep 2019 9880 vues ESSADDOUKI Mostafa 3 min de lecture
Introduction et syntaxe de base
1 Introduction au langage C++ 2 Entrée-sortie en C++ - cin et cout 3 Inférence de type avec le mot-clé auto en C++ 4 Classe std::string et les chaînes de caractères en C++ 5 Les structures conditionnelles (if et switch) en C++ (C++17 et C++20) 6 Les boucles en C++ (C++17 et C++20) 7 La gestion des fichiers en C++
Pointeurs et fonctions
8 Introduction aux pointeurs en C++ - Déclaration et interêts 9 Les références en C++ - déclaration et interêts 10 Les tableaux en C++ - Déclaration et interêts 11 Introduction aux fonctions en C++ 12 Passer des arguments à une fonction en C++ 13 Déclarer un paramètre const en C++ 14 Les fonctions Lambda en C++ 15 Fonctions utiles (Mathématiques et caractères) en C++
Programmation OO
16 Classes et objets en C++ 17 Spécificateurs d'accès en C++ 18 Constructeurs et destructeur d'une classe en C++ 19 Fonctions membres en C++ 20 Membres statiques d'une classe en C++ 21 Fonctions en ligne en C++ - inline 22 Fonctions et classes amies en C++ - friend 23 Surcharge des fonctions en C++ 24 Surcharge des opérateurs en C++ 25 Héritage en C++ 26 La gestion d'exceptions en C++ : déclaration, utilisation et personnalisation 27 fonctions et classes templates en C++ 28 Les nouveautés C++20 pour améliorer les templates en C++
Structures de données
29 Introduction aux structures de données 30 Les structures en C++ et la différence avec les structures en C 31 Les listes chaînées en C++ 32 Les piles en C++ 33 File d'attente en C++ 34 Arbre binaire de recherche : définition et mise en oeuvre en C++
La bibliothèque standard (STL)
35 Introduction à la bibliothèque de Template Standard STL 36 Les itérateurs en C++ - définition, déclaration et exemples 37 La classe array en C++ (bibliothèque STL) <array> 38 La classe vector de la bibliothèque STL <vector> 39 La classe deque en C++ ( Bibliothèque STL) 40 La classe list en C++ (bibliothèque STL) <list> 41 La classe stack (Pile) en C++ (bibliothèque STL) <stack> 42 La classe queue (File d'attente) en C++ (bibliothèque STL) <queue> 43 La file d'attente prioritaire (classe priority_queue) - Bibliothèque STL 44 Les ensembles en C++ (Classe set <set> - Bibliothèque STL) 45 Les dictionnaires en C++ : Classe map (Bibliothèque STL) 46 Introduction aux algorithmes de la bibliothèque STL (programmation compétitive) 47 Tri et méthodes associées en C++ - Bibliothèque STL 48 Recherche dichotomique et méthodes associées en C++ - Bibliothèque STL 49 Appliquer un prédicat ou une fonction aux éléments d'une séquence en C++ - Bibliothèque STL 50 Recherche dans une séquence et méthodes associées en C++ - Bibliothèque STL

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

Donnée membre statique Un attribut déclaré 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.
Initialisation obligatoire hors de la classe Un membre statique ne peut pas être initialisé dans la définition de la classe. Il doit être déclaré à l'extérieur de la classe avec l'opérateur de résolution de porté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

Fonction membre statique Une fonction membre déclarée 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;
}
Sortie
Nombre de voitures créées : 4

Comparaison membre normal vs membre statique

CaractéristiqueMembre normalMembre statique
Nombre de copiesUne par objetUne seule pour toute la classe
Appartient àUn objet spécifiqueLa classe entière
Accès viaobjet.membreNomClasse::membre
Accès au pointeur thisOuiNon
Peut accéder aux membres non-statiquesOuiNon
InitialisationDans le constructeurEn dehors de la classe
Cas d'usage typiquesLes membres statiques sont utiles pour :
  • 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.