logo

Mot-clé statique en C++

Prérequis: Variables statiques en C

débit en bauds dans Arduino

Le mot clé static a des significations différentes lorsqu’il est utilisé avec différents types. Nous pouvons utiliser des mots-clés statiques avec :



    Variables statiques : variables dans une fonction, variables dans une classe Membres statiques d'une classe : objets de classe et fonctions dans une classe Examinons maintenant chacune de ces utilisations de la statique en détail.

Variables statiques

Variables statiques dans une fonction : Lorsqu'une variable est déclarée comme statique, un espace pour il est alloué pour la durée de vie du programme . Même si la fonction est appelée plusieurs fois, l'espace pour la variable statique n'est alloué qu'une seule fois et la valeur de la variable lors de l'appel précédent est reportée lors de l'appel de fonction suivant. Ceci est utile pour implémenter des coroutines en C/C++ ou toute autre application où l'état précédent de la fonction doit être stocké.

C++








// C++ program to demonstrate> // the use of static Static> // variables in a Function> #include> #include> using> namespace> std;> void> demo()> {> >// static variable> >static> int> count = 0;> >cout << count <<>' '>;> >// value is updated and> >// will be carried to next> >// function calls> >count++;> }> int> main()> {> >for> (>int> i = 0; i <5; i++)> >demo();> >return> 0;> }>

>

>

Sortir

0 1 2 3 4>

Vous pouvez voir dans le programme ci-dessus que le nombre de variables est déclaré statique. Ainsi, sa valeur est transmise via les appels de fonction. Le nombre de variables n'est pas initialisé à chaque fois que la fonction est appelée. En remarque, Java n'autorise pas les variables locales statiques dans les fonctions.

Variables statiques dans une classe : Comme les variables déclarées comme statiques ne sont initialisées qu'une seule fois car elles se voient allouer de l'espace dans un stockage statique séparé, les variables statiques dans une classe sont partagés par les objets. Il ne peut pas y avoir plusieurs copies des mêmes variables statiques pour différents objets. C'est également pour cette raison que les variables statiques ne peuvent pas être initialisées à l'aide de constructeurs.

C++




// C++ program to demonstrate static> // variables inside a class> #include> using> namespace> std;> class> GfG {> public>:> >static> int> i;> >GfG(){> >// Do nothing> >};> };> int> main()> {> >GfG obj1;> >GfG obj2;> >obj1.i = 2;> >obj2.i = 3;> >// prints value of i> >cout << obj1.i <<>' '> << obj2.i;> }>

>

>

Sortir

undefined reference to `GfG::i' collect2: error: ld returned 1 exit status>

Vous pouvez voir dans le programme ci-dessus que nous avons essayé de créer plusieurs copies de la variable statique i pour plusieurs objets. Mais cela ne s’est pas produit. Ainsi, une variable statique à l'intérieur d'une classe doit être initialisée explicitement par l'utilisateur en utilisant le nom de classe et l'opérateur de résolution de portée en dehors de la classe, comme indiqué ci-dessous :

C++


exemples de systèmes d'exploitation



// C++ program to demonstrate static> // variables inside a class> #include> using> namespace> std;> class> GfG {> public>:> >static> int> i;> >GfG(){> >// Do nothing> >};> };> int> GfG::i = 1;> int> main()> {> >GfG obj;> >// prints value of i> >cout << obj.i;> }>

>

>

Sortir

1>

Membres statiques de la classe

Classer les objets comme statiques : Tout comme les variables, les objets déclarés comme statiques ont également une portée jusqu'à la durée de vie du programme. Considérez le programme ci-dessous où l'objet est non statique.

C++


listes CSS



// CPP program to illustrate> // when not using static keyword> #include> using> namespace> std;> class> GfG {> >int> i;> public>:> >GfG()> >{> >i = 0;> >cout <<>'Inside Constructor '>;> >}> >~GfG() { cout <<>'Inside Destructor '>; }> };> int> main()> {> >int> x = 0;> >if> (x == 0) {> >GfG obj;> >}> >cout <<>'End of main '>;> }>

>

>

Sortir

Inside Constructor Inside Destructor End of main>

Dans le programme ci-dessus, l'objet est déclaré à l'intérieur du bloc if comme non statique. Ainsi, la portée d’une variable se trouve uniquement à l’intérieur du bloc if. Ainsi, lorsque l'objet est créé, le constructeur est invoqué et dès que le contrôle du bloc if passe, le destructeur est invoqué car la portée de l'objet se trouve à l'intérieur du bloc if uniquement là où il est déclaré. Voyons maintenant le changement de sortie si nous déclarons l'objet comme statique.

C++




// CPP program to illustrate> // class objects as static> #include> using> namespace> std;> class> GfG {> >int> i = 0;> public>:> >GfG()> >{> >i = 0;> >cout <<>'Inside Constructor '>;> >}> >~GfG() { cout <<>'Inside Destructor '>; }> };> int> main()> {> >int> x = 0;> >if> (x == 0) {> >static> GfG obj;> >}> >cout <<>'End of main '>;> }>

>

>

Sortir

Inside Constructor End of main Inside Destructor>

Vous pouvez clairement voir le changement de sortie. Désormais, le destructeur est invoqué après la fin du main. Cela est dû au fait que la portée des objets statiques s'étend sur toute la durée de vie du programme.

Fonctions statiques dans une classe : Tout comme les données membres statiques ou les variables statiques à l'intérieur de la classe, les fonctions membres statiques ne dépendent pas non plus de l'objet de la classe. Nous sommes autorisés à invoquer une fonction membre statique en utilisant l'objet et l'opérateur '.', mais il est recommandé d'invoquer les membres statiques en utilisant le nom de classe et l'opérateur de résolution de portée. Les fonctions membres statiques sont autorisées à accéder uniquement aux données membres statiques ou à d'autres fonctions membres statiques. , ils ne peuvent pas accéder aux données membres non statiques ou aux fonctions membres de la classe.

C++


sélecteur de requête



// C++ program to demonstrate static> // member function in a class> #include> using> namespace> std;> class> GfG {> public>:> >// static member function> >static> void> printMsg() { cout <<>'Welcome to GfG!'>; }> };> // main function> int> main()> {> >// invoking a static member function> >GfG::printMsg();> }>

>

>

Sortir

Welcome to GfG!>

Articles Liés:

  • Quiz sur les mots-clés statiques
  • Données membres statiques en C++
  • Quand les objets statiques sont-ils détruits ?
  • Faits intéressants sur les fonctions membres statiques
  • Les fonctions statiques peuvent-elles être virtuelles ?
  • Comparaison des mots-clés statiques en C++ et Java
  • Fonctions statiques en C