Qu'est-ce qu'une classe de stockage en C ++ et ses types?



Dans ce blog sur les classes de stockage, nous examinerons diverses classes de stockage utilisées en C ++ telles que auto, register, static, extern et mutable avec des exemples.

Classe de stockage dans C ++ définit la durée de vie et la visibilité de la variable / des fonctions. La durée de vie est la durée jusqu'à laquelle la variable reste active et la visibilité est l'accessibilité d'une variable à partir de différents modules du programme. Cette permet de retracer l'existence d'une variable particulière pendant l'exécution d'un programme. Dans ce blog sur les classes de stockage, nous examinerons différentes classes de stockage utilisées en C ++.

Commençons.





Qu'est-ce que la classe de stockage en C ++?

Chaque variable en C ++ a un type de données et une classe de stockage. Le type de données spécifie le type de données qui peuvent être stockées dans une variable telle que int, float, char, etc. La classe de stockage contrôle deux propriétés différentes d'une variable: durée de vie et portée.

Vous auriez vu que chaque variable a un type de données, mais vous n'avez peut-être pas vu de classe de stockage attachée à une variable jusqu'à présent. En fait, si vous ne définissez pas de classe de stockage, le compilateur lui attribue automatiquement une classe de stockage par défaut. La classe de stockage d’une variable donne des informations sur l’emplacement de stockage de la variable en mémoire, la valeur initiale par défaut, la portée de la variable et sa durée de vie.



Types de classe de stockage

Il existe cinq classes de stockage dans un programme C ++:

  • auto
  • S'inscrire
  • statique
  • externe
  • mutable

Décrivons en détail chacune des classes de stockage.

Classe de stockage automatique

La classe de stockage automatique (automatique) est la classe de stockage par défaut pour toutes les variables locales, qui sont déclarées à l'intérieur d'une fonction ou d'un bloc. Le mot-clé auto est rarement utilisé lors de l'écriture d'un Programme C ++ .



La portée des variables automatiques est dans la fonction ou le bloc où elles ont été déclarées et il n'est pas accessible en dehors de cette fonction ou de ce bloc. Il est également accessible dans les blocs imbriqués dans le bloc / fonction parent dans lequel la variable automatique a été déclarée.

Vous pouvez accéder aux variables automatiques en dehors de leur portée à l'aide d'une variable de pointeur. Vous devez pointer vers le même emplacement mémoire où résident les variables.

Sa durée de vie est la même que la durée de vie de la fonction. Une fois l'exécution d'une fonction terminée, la variable est détruite.

Par défaut, une valeur de garbage leur est affectée lors de la déclaration.

Syntaxe:

datatype nom_var1 [= valeur]

ou

type de données automatique nom_var1 [= valeur]

Dans l'exemple ci-dessus, deux variables sont définies avec la même classe de stockage. Auto ne peut être utilisé que pour définir des variables locales, c'est-à-dire dans des fonctions.

Enregistrer la classe de stockage

Comme son nom l'indique, la classe de stockage de registre est utilisée pour déclarer des variables de registre. Toute la fonctionnalisation de la variable de registre est la même que la variable auto sauf que le compilateur essaie de stocker ces variables dans le registre du microprocesseur si un registre libre est disponible. Si un registre gratuit n'est pas disponible, ceux-ci sont alors stockés uniquement dans la mémoire.

Ainsi, les opérations sur les variables de registre sont beaucoup plus rapides que celles des autres variables qui sont stockées dans la mémoire pendant l'exécution du programme.

En général, peu de variables auxquelles un programme doit accéder fréquemment sont déclarées dans la classe de stockage de registre pour améliorer la durée d'exécution du programme. L'adresse d'une variable de registre ne peut pas être obtenue à l'aide de pointeurs.

La taille maximale de la variable est égale à la taille du registre (soit un mot environ). Il ne peut pas être associé à un opérateur unaire «&» car il n’a pas d’emplacement mémoire.

Syntaxe:

register datatype nom_var1 [= valeur]

Exemple:

qu'est-ce qu'un mot réservé en java
{register int pi}

La définition de «registre» ne signifie pas que la variable sera stockée dans un registre. Il peut être stocké dans un registre en fonction des restrictions matérielles et d'implémentation.

Examinons un exemple de classes d'enregistrement et de stockage automatique.

Exemple:

#include using namespace std // déclaration de la variable à rendre extern // une valeur initiale peut également être initialisée à x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // déclaration d'une variable automatique // écrire 'int a = 32' fonctionne aussi) int num = 32 // imprimer la variable auto 'a' printf ('Valeur de la variable' num '' 'déclarée comme auto:% dn', num) printf ( '--------------------------------')} void registerStorageClass () {printf ('nDemonstrating register classnn') / / déclarant une variable de registre register char c = 'G' // impression de la variable de registre 'b' printf ('Valeur de la variable' c '' 'déclarée comme registre:% dn', c) printf ('---- ---------------------------- ')} int main () {// Pour démontrer la classe de stockage automatique autoStorageClass () // Pour démontrer register Storage Class registerStorageClass () return 0}

Production:

Output - Classe de stockage en C ++ - EdurekaClasse de stockage statique

La classe de stockage statique est utilisée pour déclarer variables statiques . Les variables statiques conservent leur valeur (c'est-à-dire la dernière valeur) même lorsqu'elles sont hors de leur portée. Les variables statiques ne sont initialisées qu'une seule fois &exister jusqu'à la fin du programme.

La mémoire est allouée une seule fois à la variable statique et aucune nouvelle mémoire n'est allouée car ils ne sont pas re-déclarés. Les variables statiques globales sont accessibles n'importe où dans le programme. Par défaut, la valeur 0 leur est attribuée par le compilateur.

En C ++, lorsque statique est utilisé sur un membre de données de classe, une seule copie de ce membre est partagée par tous les objets de sa classe.

Syntaxe:

type de données statique nom_var1 [= valeur]

Exemple:

#include void function (void) static int c = 5 // Variable statique globale main () {while (c--) {function ()} return 0} void function (void) {static int cnt = 2 cnt ++ std :: cout<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

Production:

Classe de stockage externe

La classe de stockage externe est requise lorsque les variables doivent être partagées entre plusieurs fichiers. Les variables externes ont une portée globale et ces variables sont visibles en dehors du fichier dans lequel elles sont déclarées. La variable extern est visible par tous les programmes. Il est utilisé si deux fichiers ou plus partagent la même variable ou fonction.

La durée de vie des variables externes est aussi longue que le programme dans lequel elles sont déclarées se termine. Une variable globale normale peut également être créée en externe en plaçant le mot-clé ‘extern’ avant sa déclaration / définition dans n’importe quelle fonction / bloc.

Lorsque vous utilisez «extern», la variable ne peut pas être initialisée car elle ne fait que pointer le nom de la variable vers un emplacement de stockage qui a été précédemment défini.

Syntaxe

type de données externes nom_var1

Exemple

Questions entretien C ++ stl
#include int cnt extern void write_extern () main () {cnt = 5 write_extern ()}

Deuxième fichier: support.cpp

#include extern int cnt void write_extern (void) {std :: cout<< 'Count is ' << cnt << std::endl } 

Ici, le mot-clé extern est utilisé pour déclarer cnt dans un autre fichier. Maintenant, compilez ces deux fichiers comme suit et moins

$ g ++ main.cpp support.cpp -o écriture

Cela produira un programme exécutable d'écriture, essayez d'exécuter l'écriture et vérifiez le résultat comme suit & moins

$. / écriture

5

Pour aller de l'avant avec la classe de stockage en C ++, jetons un coup d'œil à la dernière, à savoir la classe de stockage Mutable.

Classe de stockage mutable

Le spécificateur mutable s'applique uniquement aux objets de classe, ce qui permet à un membre d'un objet de remplacer la fonction membre const. Autrement dit, un membre mutable peut être modifié par une fonction membre const.

Examinons enfin le tableau de comparaison pour comprendre les différences entre les différentes classes de stockage.

Classe de stockage

Mot-clé

Durée de vie

Visibilité

Valeur initiale

Automatique

auto

Bloc fonctionnel

Local

Des ordures

Externe

externe

Programme entier

Global

Zéro

Statique

statique

Programme entier

Local

Zéro

S'inscrire

S'inscrire

Bloc fonctionnel

Local

Des ordures

Mutable

mutable

a une relation en java

Classe

Local

Des ordures

Maintenant, après avoir parcouru les programmes C ++ ci-dessus, vous auriez compris ce que sont les différentes classes de stockage en C ++ et comment les implémenter. J'espère que ce blog est informatif et a une valeur ajoutée pour vous.

Nous sommes donc arrivés à la fin de cet article sur les «classes de stockage en C ++».

Si vous souhaitez en savoir plus, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate et Spring.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce blog et nous vous répondrons dans les plus brefs délais.