Static

Résolu
futur ingenieure Messages postés 133 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
quel est le role du mot clé static en P.O.O c++?

2 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
1
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
J'avoue ne m'en être jamais servi, et c'est pourquoi je n'ai pas réussi à totalement débuger le petit code ci-dessous, mais dans une classe si un membre est déclaré static il sera partagé par toutes les instances de la classe...

Je pense que le principal intérêt doit être (comme je l'ai fait) de pouvoir comptabiliser le nombre d'instance de la classe simultanément utilisé (pour faire un suivi de la mémoire par exemple)
#include <iostream>

class Exemple
{
      private: double x;
               static int cpt; // compteur commun à tous les objets de la classe
               
      public : Exemple(double d=0) // méthode de création
               {
                   x=d;
                   cpt++;
               }
               ~Exemple() // méthode de destruction
               {
                   cpt--;
               }
               void Afficher()
               {
                    std::cout << "x = " << x << "\tcompteur = " << cpt << std::endl;
               }
};

int main(void)
{
    Exemple a(7.5);
    a.Afficher();  // x = 7.5    compteur = 1
        
    Exemple b(3.9);
    a.Afficher();  // x = 7.5    compteur = 2
    b.Afficher();  // x = 3.9    compteur = 2
        
    system("PAUSE");
    return 0;    
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bah, il n'y a pas de bug dans ton programme ^^.
Vu que la variable cpt est commune, si tu incrémentes cpt via une instance A, cela modifiera les autres instances.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
Quand je compile (avec Dev-C++) j'ai un message d'erreur...
[Linker error] undefined reference to `Exemple::cpt'
[Linker error] undefined reference to `Exemple::cpt'
[Linker error] undefined reference to `Exemple::cpt'
Id returned 1 exit status
C'est pour ça que je disais que j'arrivais pas à le débuger...
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
En effet, il faut initialiser ta variable static, lui donné une valeur initiale.
Une variable statique de classe est en fait une espèce de variable globale avec un nom de classe devant (donc une certain protection aussi.
Il faut mettre dans un .cpp :
int Exemple::cpt=0;
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention  
 
Ok, ça marche maintenant, je le saurai pour la prochaine fois comme ça ^^
0