static c
Importance et utilisation de statique en C ++ avec des exemples.
Dans nos rubriques précédentes sur les classes de stockage, nous avons découvert le mot statique. Nous avons découvert les variables statiques déclarées dans un programme C ++. Nous savons que les variables statiques ne sont initialisées qu'une seule fois et qu'elles conservent la valeur tout au long du programme.
Semblable aux variables statiques, dans ce tutoriel, nous allons étendre l'utilisation d'un mot-clé statique à:
- Variables membres statiques dans une classe
- Objets de classe statique
- Classe de méthodes statiques
=> Consultez les didacticiels de formation approfondie sur le C ++ ici.
Ce que vous apprendrez:
- Variables membres statiques dans une classe
- Objets de classe statique
- Méthodes statiques dans une classe
- Objectif des fonctions statiques
- Conclusion
- lecture recommandée
Variables membres statiques dans une classe
Une variable statique n'est jamais allouée sur une pile. Un espace leur est alloué sur un stockage statique différent. Cela signifie que lorsque nous déclarons une variable statique dans une classe, cette variable est partagée par tous les objets de cette classe.
Comme les variables statiques ne sont initialisées qu'une seule fois et sont partagées par tous les objets d'une classe, les variables statiques ne sont jamais initialisées par un constructeur. Au lieu de cela, la variable statique doit être explicitement initialisée en dehors de la classe une seule fois à l'aide de l'opérateur de résolution de portée (: :).
Lorsque le premier objet est créé, toutes les données statiques de type primitif sont initialisées à zéro lorsqu'aucune autre initialisation n'est présente.
Consultez l'exemple suivant qui illustre la variable statique dans une classe.
Comme indiqué dans le code ci-dessous, nous avons le nombre de variables statiques en tant que membre de l'exemple de classe. Notez que nous avons initialisé cette variable explicitement en dehors de la classe avec la valeur initiale = 0;
Ensuite, nous incrémentons cette variable statique dans le constructeur de la classe.
Regardons un exemple de programme.
#include #include using namespace std; class sample{ int var; static int count; public: sample(int var):var(var){ cout<<'Count = '< Production:
Nombre = 0
Nombre = 1
Nombre = 2
Dans la fonction principale, nous créons trois objets différents. Dans la sortie, nous voyons que la valeur de la variable statique est conservée entre les créations d'objets et non réinitialisée à chaque création d'objet. Ceci pour le premier objet, count = 0. Ensuite, il est incrémenté à 1. Pour l'objet suivant, count = 1 et ainsi de suite.
Si le nombre était une variable ordinaire, alors la sortie aurait été:
Nombre = 0
Nombre = 0
Nombre = 0
Objets de classe statique
Tout comme les variables membres statiques de classe, nous pouvons déclarer les objets de classe comme statiques. Les objets de classe statiques sont également initialisés une seule fois et restent actifs tout au long du programme. Comme l'objet est un type défini par l'utilisateur, un objet de classe statique est initialisé de la même manière que les objets ordinaires à l'aide d'un constructeur.
Prenons un exemple de programmation pour mieux comprendre les objets de classe statique.
meilleur examen du logiciel de synthèse vocale
#include using namespace std; class xyz { int i; public: xyz() { i=0; cout << 'Constructor::xyz'<Dans ce programme, nous avons une classe xyz avec un constructeur et un destructeur. Dans la fonction principale, nous déclarons une variable x = 0; Si x est égal à zéro, nous créons un objet statique de classe xyz.
Le programme donne la sortie suivante.
Production:
Constructeur :: xyz
Fin principal
Destructeur :: xyz
Normalement, la sortie aurait dû être
Constructeur :: xyz
Destructeur :: xyz
Fin principal
Mais lorsque nous créons un objet statique, cet objet a une portée jusqu'à la fin du programme et non lorsque l'objet sort de la portée (fin de l'instruction if). C'est la raison pour laquelle le destructeur de l'objet obj ne s'exécute qu'après la fin de la fonction principale.
Méthodes statiques dans une classe
Nous pouvons également avoir des méthodes statiques dans une classe. Tout comme les objets statiques et les variables membres statiques, les fonctions membres statiques ont également une portée jusqu'à la fin de l'exécution du programme.
Lorsqu'une méthode de classe est déclarée statique, elle ne peut accéder qu'aux membres statiques, c'est-à-dire aux variables statiques et aux fonctions statiques de la classe. Il ne peut pas accéder aux membres ordinaires de la classe.
De plus, il n'y a pas de pointeur «this» disponible pour les méthodes de classe statique.
Nous sommes autorisés à utiliser l’objet et l’opérateur point pour accéder aux méthodes statiques d’une classe, mais il est recommandé d’utiliser le nom de la classe et l’opérateur de résolution d’étendue pour accéder à ces méthodes.
Voici un exemple d'utilisation d'une méthode statique dans une classe.
Dans cet exemple, nous avons défini deux variables membres statiques A et B, et une méthode statique printValues. Les variables A et B sont initialisées aux valeurs 10 et 20 respectivement. Dans la méthode statique printValues, les valeurs de A et B subissent respectivement un post-incrément et un pré-incrément. Après cela, les valeurs sont imprimées.
Dans la méthode principale, nous appelons directement la méthode statique printValues en utilisant le nom de la classe car nous n'avons besoin d'aucun objet pour appeler les fonctions statiques.
#include using namespace std; class Sample { static int A; static int B; public: static void printValues(){ A++; ++B; cout <<'Value of A: ' << A << endl; cout <<'Value of B: ' << B << endl; } }; int Sample :: A =10; int Sample :: B =20; int main(){ Sample::printValues(); return 0; }
Production:
comment créer de faux comptes de messagerie
Valeur de A: 11
Valeur de B: 21
La capture d'écran de la même sortie est donnée ci-dessous.
Ainsi, dans la sortie, nous voyons que les valeurs des deux variables statiques sont modifiées selon les opérations effectuées sur elles.
Objectif des fonctions statiques
Après avoir vu les différentes utilisations du mot-clé static dans ce didacticiel, une question reste à savoir à quoi servent les fonctions statiques.
L'objectif des fonctions statiques peut être résumé comme suit:
- Nous utilisons des fonctions statiques lorsque cette fonction ne dépend pas de l'objet pour l'appel et le fonctionnement.
- Encore un autre objectif de l'utilisation de la fonction statique est de limiter son utilisation. Contrairement aux fonctions globales, l'accès aux fonctions statiques est limité au fichier dans lequel elles sont placées. Ainsi, afin de limiter l'accès à la fonction, nous le rendons statique.
- En dehors des deux raisons ci-dessus, nous utilisons des fonctions statiques lorsque nous ne voulons pas créer un objet d'une classe juste pour exécuter une fonction qui ne fait référence à aucun membre de la classe.
Conclusion
Pour conclure ce sujet, nous pouvons dire que le mot-clé static en C ++ peut être utilisé de différentes manières pour déclarer des variables, des variables membres, des objets de classe, des méthodes, etc.
Les fonctions membres statiques et les variables n'ont pas besoin d'être accédées avec l'objet, mais elles peuvent être directement accédées en utilisant le nom de la classe. En outre, la portée des entités statiques demeure tout au long de l'exécution du programme. Par conséquent, le mot-clé static peut également être utilisé pour contrôler l'accès d'une entité particulière.
Dans nos prochains didacticiels, nous en apprendrons davantage sur plusieurs autres sujets de POO en C ++.
=> Vérifiez ici pour voir de A à Z des didacticiels de formation C ++ ici.
lecture recommandée
- Se moquer des méthodes privées, statiques et nulles à l'aide de Mockito
- Test statique et test dynamique - Différence entre ces deux techniques de test importantes
- TOP 40 des outils d'analyse de code statique (meilleurs outils d'analyse de code source)
- Meilleure série de tutoriels C # GRATUITS: Le guide ultime de C # pour les débutants
- Paramétrage des valeurs statiques dans LoadRunner
- Variables Python
- Types d'héritage en C ++
- Variables en C ++