Què és una classe d'emmagatzematge en C ++ i els seus tipus?



En aquest bloc de classes d'emmagatzematge, veurem diverses classes d'emmagatzematge utilitzades en C ++ com ara auto, register, static, extern i mutable amb exemples.

Classe d'emmagatzematge a C ++ defineix la vida útil i la visibilitat de la variable / funcions. La vida útil és la durada fins que la variable es manté activa i la visibilitat és l'accessibilitat d'una variable des de diferents mòduls del programa. Això ajuda a rastrejar l'existència d'una variable particular durant l'execució d'un programa. En aquest bloc de classes d'emmagatzematge, analitzarem diverses classes d'emmagatzematge utilitzades en C ++.

Anem a començar.





Què és la classe d'emmagatzematge en C ++?

Totes les variables de C ++ tenen tipus de dades i classe d'emmagatzematge. El tipus de dades especifica el tipus de dades que es poden emmagatzemar en una variable com ara int, float, char, etc. La classe d'emmagatzematge controla dues propietats diferents d'una variable: vida útil i abast.

Hauríeu vist que totes les variables tenen un tipus de dades, però és possible que fins ara no hagueu vist cap classe d’emmagatzematge associada a una variable. En realitat, si no definiu una classe d'emmagatzematge, el compilador li assigna automàticament una classe d'emmagatzematge per defecte. La classe d'emmagatzematge d'una variable proporciona informació sobre la ubicació d'emmagatzematge de la variable a la memòria, el valor inicial predeterminat, l'abast de la variable i la seva vida útil.



Tipus de classe d'emmagatzematge

Hi ha cinc classes d'emmagatzematge en un programa C ++:

  • automàtic
  • registre
  • estàtic
  • extern
  • mutable

Analitzem detalladament cadascuna de les classes d'emmagatzematge.

Classe d'emmagatzematge automàtic

La classe d'emmagatzematge automàtic (automàtic) és la classe d'emmagatzematge predeterminada per a totes les variables locals, que es declaren dins d'una funció o d'un bloc. La paraula clau automàtica poques vegades s’utilitza mentre s’escriu un Programa C ++ .



L'abast de les variables automàtiques es troba dins de la funció o bloc on s'han declarat i no es pot accedir fora d'aquesta funció o bloc. També s’hi pot accedir dins dels blocs imbricats dins del bloc / funció pare on es va declarar la variable automàtica.

Podeu accedir a variables automàtiques fora del seu abast mitjançant una variable punter. Cal assenyalar la mateixa ubicació de memòria on resideixen les variables.

La seva vida útil és la mateixa que la vida útil de la funció. Un cop acabada l'execució d'una funció, la variable es destrueix.

Per defecte, se'ls assigna un valor de deixalles durant la declaració.

Sintaxi:

tipus de dades var_name1 [= valor]

o bé

tipus de dades automàtic var_name1 [= valor]

A l'exemple anterior, es defineixen dues variables amb la mateixa classe d'emmagatzematge. L'automòbil només es pot utilitzar per definir variables locals, és a dir, dins de les funcions.

Registra classe d'emmagatzematge

Com el seu nom indica, la classe d'emmagatzematge de registres s'utilitza per declarar variables de registre. Tota la funcionalitat de la variable de registre és la mateixa que la variable automàtica, tret que el compilador intenta emmagatzemar aquestes variables al registre del microprocessador si hi ha disponible un registre gratuït. Si no hi ha disponible un registre gratuït, aquests només s’emmagatzemen a la memòria.

Per tant, les operacions sobre variables de registre són molt més ràpides que les d'altres variables que s'emmagatzemen a la memòria durant el temps d'execució del programa.

En general, poques variables a les quals cal accedir amb freqüència en un programa es declaren dins de la classe d'emmagatzematge de registres per millorar el temps d'execució del programa. L'adreça d'una variable de registre no es pot obtenir mitjançant punteres.

La mida màxima de la variable és igual a la mida del registre (és a dir, una paraula aproximadament). No pot aplicar-li un operador ‘&’ unari, ja que no té una ubicació de memòria.

Sintaxi:

registre tipus de dades var_name1 [= valor]

Exemple:

java system.exit (1)
{register int pi}

Definir ‘registre’ no significa que la variable s’emmagatzemarà en un registre. Pot ser emmagatzemat en un registre en funció de les restriccions de maquinari i implementació.

Vegem un exemple de classes de registre i emmagatzematge automàtic.

Exemple:

#include using namespace std // declaració de la variable que es farà externa // també es pot inicialitzar un valor inicial a x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // declarant una variable automàtica (simplement // escriure 'int a = 32' també funciona) int num = 32 // imprimir la variable automàtica 'a' printf ('Valor de la variable' num '' 'declarat com a automàtic:% dn', num) printf ( '--------------------------------')} void registerStorageClass () {printf ('nDemonstrating classnn register') / / declarar una variable de registre register char c = 'G' // imprimir la variable de registre 'b' printf ('Valor de la variable' c '' 'declarada com a registre:% dn', c) printf ('---- ---------------------------- ')} int main () {// Per demostrar la classe d'emmagatzematge automàtic autoStorageClass () // Per demostrar registre Classe d'emmagatzematge registerStorageClass () retorn 0}

Sortida:

Sortida: classe dClasse d'emmagatzematge estàtic

La classe d’emmagatzematge estàtic s’utilitza per declarar variables estàtiques . Les variables estàtiques conserven el seu valor (és a dir, l’últim valor) fins i tot quan estan fora del seu abast. Les variables estàtiques només s’inicialitzen una vegada &existiran fins a la finalització del programa.

La memòria només s’assigna una vegada a la variable estàtica i no s’assigna cap nova memòria perquè no es torna a declarar. Es pot accedir a variables estàtiques globals des de qualsevol lloc del programa. Per defecte, el compilador els assigna el valor 0.

A C ++, quan s’utilitza estàtic en un membre de dades de classe, fa que només es comparteixi una còpia d’aquest membre per tots els objectes de la seva classe.

Sintaxi:

tipus de dades estàtic var_name1 [= valor]

Exemple:

#include void function (void) static int c = 5 // variable estàtica global 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 } 

Sortida:

Classe d'emmagatzematge extern

La classe d'emmagatzematge extern és necessària quan les variables s'han de compartir entre diversos fitxers. Les variables externes tenen un abast global i aquestes variables són visibles fora del fitxer en què es declaren. La variable externa és visible per a tots els programes. S'utilitza si dos o més fitxers comparteixen la mateixa variable o funció.

La vida útil de les variables externes és sempre que es finalitzi el programa en què es declara. Una variable global normal també es pot fer extern col·locant la paraula clau 'extern' abans de la seva declaració / definició en qualsevol bloc / funció.

Quan utilitzeu 'extern', la variable no es pot inicialitzar, ja que l'únic que fa és dirigir el nom de la variable a una ubicació d'emmagatzematge que s'ha definit prèviament.

Sintaxi

tipus de dades extern var_name1

Exemple

#include int cnt extern void write_extern () main () {cnt = 5 write_extern ()}

Segon fitxer: support.cpp

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

Aquí, la paraula clau externa s’utilitza per declarar cnt en un altre fitxer. Ara compileu aquests dos fitxers de la manera següent i menys

$ g ++ main.cpp support.cpp -o write

Això produirà un programa executable d'escriptura, intenteu executar l'escriptura i comproveu el resultat de la manera següent i menys

$. / write

5

Avançant amb la classe d’emmagatzematge en C ++, fem una ullada a l’última, és a dir, classe d’emmagatzematge mutable.

Classe d'emmagatzematge mutable

L'especificador mutable només s'aplica als objectes de classe, cosa que permet a un membre d'un objecte anul·lar la funció membre const. És a dir, un membre mutable es pot modificar mitjançant una funció de membre const.

Per fi, vegem la taula de comparació per comprendre les diferències entre les diferents classes d’emmagatzematge.

Classe d'emmagatzematge

Paraula clau

Tota una vida

restriccions a sql amb exemple

Visibilitat

Valor inicial

Automàtic

automàtic

Bloc de funcions

local

Escombraries

Externa

extern

Programa sencer

global

Zero

Estàtic

estàtic

Programa sencer

local

Zero

Registra't

java com utilitzar-ho

registre

Bloc de funcions

local

Escombraries

Mutable

mutable

Classe

local

Escombraries

Ara, després d’haver passat pels programes C ++ anteriors, hauríeu entès quines són les diferents classes d’emmagatzematge a C ++ i com implementar-les. Espero que aquest bloc us sigui informatiu i de valor afegit.

Així hem arribat al final d'aquest article sobre 'Classes d'emmagatzematge en C ++'.

Si voleu obtenir més informació, consulteu el per Edureka, una empresa d’aprenentatge en línia de confiança. El curs de formació i certificació Java J2EE i SOA d’Edureka està dissenyat per formar-vos tant per a conceptes bàsics com avançats de Java, juntament amb diversos marcs Java com Hibernate & Spring

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest bloc i us respondrem el més aviat possible.