Hvad er en lagerklasse i C ++ og dens typer?



I denne blog om opbevaringsklasser vil vi se på forskellige opbevaringsklasser, der bruges i C ++, såsom auto, register, statisk, ekstern og muterbar med eksempler.

Opbevaringsklasse i C ++ definerer levetiden og synligheden af ​​variablen / funktionerne. Levetid er den varighed, indtil variablen forbliver aktiv, og synlighed er tilgængeligheden af ​​en variabel fra forskellige moduler i programmet. Dette hjælper med at spore eksistensen af ​​en bestemt variabel i løbet af et program. I denne lagerklasser-blog vil vi se på forskellige lagerklasser, der bruges i C ++.

Lad os begynde.





Hvad er lagerklasse i C ++?

Hver variabel i C ++ har datatype og lagerklasse. Datatype specificerer typen af ​​data, der kan lagres i en variabel, såsom int, float, char osv. Lagerklasse styrer to forskellige egenskaber for en variabel: levetid og omfang.

Du ville have set hver variabel har en datatype, men du har muligvis ikke set nogen lagerklasse knyttet til en variabel indtil videre. Faktisk, hvis du ikke definerer en lagerklasse, tildeler kompilatoren automatisk en standardlagerklasse til den. En variabels lagringsklasse giver oplysninger om variabelens lagerplacering i hukommelsen, standardstartværdi, variabelens omfang og dens levetid.



Typer af opbevaringsklasse

Der er fem lagerklasser i et C ++ - program:

  • auto
  • Tilmeld
  • statisk
  • ekstern
  • kan ændres

Lad os diskutere hver enkelt af lagringsklasser detaljeret.

Auto Storage Class

Automatisk (automatisk) lagringsklasse er standardlagerklassen for alle lokale variabler, der erklæres inde i en funktion eller en blok. Auto-nøgleordet bruges sjældent, mens du skriver en C ++ - program .



Omfanget af automatiske variabler ligger inden for funktionen eller blokken, hvor de er blevet deklareret, og den kan ikke tilgås uden for den funktion eller blok. Den kan også fås inden for indlejrede blokke inden for den overordnede blok / funktion, hvor den automatiske variabel blev deklareret.

Du kan få adgang til automatiske variabler uden for deres anvendelsesområde ved hjælp af en markørvariabel. Du skal pege på den samme hukommelsesplacering, hvor variablerne findes.

Dens levetid er den samme som funktionens levetid. Når udførelsen af ​​en funktion er afsluttet, ødelægges variablen.

Som standard tildeles skraldværdi dem under erklæring.

Syntaks:

datatype var_name1 [= værdi]

eller

automatisk datatype var_name1 [= værdi]

I ovenstående eksempel er to variabler defineret med samme lagerklasse. Auto kan kun bruges til at definere lokale variabler, dvs. inden for funktioner.

Registrer lagerklasse

Som navnet antyder, bruges registerlagerklassen til at erklære registervariabler. Al funktionalisering af registervariablen er den samme som den automatiske variabel, bortset fra at compileren forsøger at gemme disse variabler i mikroprocessorens register, hvis der er et frit register. Hvis der ikke er et gratis register, gemmes disse kun i hukommelsen.

Således er operationer på registervariabler meget hurtigere end andre variabler, der er gemt i hukommelsen i løbet af programmet.

Generelt er få variabler, der ofte skal tilgås i et program, deklareret inden for registerlagerklassen for at forbedre programmets driftstid. Adressen til en registervariabel kan ikke opnås ved hjælp af pegepinde.

Den maksimale størrelse af variablen er lig med størrelsen på registret (dvs. ca. et ord). Det kan ikke have en unary '&' operatør anvendt på den, da den ikke har en hukommelsesplacering.

Syntaks:

registrer datatype var_name1 [= værdi]

Eksempel:

hvordan man kører php på Windows 10
{register int pi}

Definition af 'register' betyder ikke, at variablen gemmes i et register. Det kan blive gemt i et register afhængigt af hardware- og implementeringsrestriktioner.

Lad os se på et eksempel på register- og autolagringsklasser.

Eksempel:

#include ved hjælp af namespace std // erklærer variablen, der skal laves ekstern // en startværdi kan også initialiseres til x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // erklærer en autovariabel (simpel // skrivning 'int a = 32' fungerer også) int num = 32 // udskrivning af den automatiske variabel 'a' printf ('Værdien af ​​variablen' num '' 'erklæret som auto:% dn', num) printf ( '--------------------------------')} ugyldigt registerStorageClass () {printf ('nDemonstrating register classnn') / / erklærer et registervariabelregister char c = 'G' // udskrivning af registervariablen 'b' printf ('Værdi af variablen' c '' 'erklæret som register:% dn', c) printf ('---- ---------------------------- ')} int main () {// For at demonstrere auto Storage Class autoStorageClass () // For at demonstrere register Storage Class registerStorageClass () return 0}

Produktion:

Output - Lagerklasse i C ++ - EdurekaStatisk opbevaringsklasse

Den statiske lagerklasse bruges til at deklarere statiske variabler . Statiske variabler bevarer deres værdi (dvs. den sidste værdi), selv når de er uden for deres anvendelsesområde. Statiske variabler initialiseres kun én gang &eksisterer indtil programmets afslutning.

Hukommelsen allokeres kun én gang til den statiske variabel, og der tildeles ingen ny hukommelse, fordi de ikke gendeklareres. Globale statiske variabler kan fås overalt i programmet. Som standard tildeles de værdien 0 af compileren.

I C ++, når statisk bruges på et klassedatamedlem, får det kun en kopi af dette medlem til at blive delt af alle objekter i sin klasse.

Syntaks:

statisk datatype var_name1 [= værdi]

Eksempel:

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

Produktion:

Ekstern opbevaringsklasse

Den eksterne lagringsklasse kræves, når variablerne skal deles på tværs af flere filer. Eksterne variabler har globalt omfang, og disse variabler er synlige uden for den fil, hvori de erklæres. Den eksterne variabel er synlig for alle programmer. Det bruges, hvis to eller flere filer deler den samme variabel eller funktion.

Levetiden for de eksterne variabler er så længe det program, hvori de erklæres, afsluttes. En normal global variabel kan også laves eksternt ved at placere nøgleordet 'ekstern' før dens erklæring / definition i en hvilken som helst funktion / blok.

Når du bruger 'ekstern', kan variablen ikke initialiseres, da alt, hvad den gør, er at pege variabelnavnet på et lagringssted, der tidligere er defineret.

Syntaks

ekstern datatype var_name1

Eksempel

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

Anden fil: support.cpp

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

Her bruges eksternt nøgleord til at erklære cnt i en anden fil. Kompilér nu disse to filer som følger & minus

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

Dette vil producere skrive eksekverbart program, prøv at udføre skrive og kontrollere resultatet som følger & minus

$. / skriv

5

Fortsæt med lagringsklasse i C ++, lad os se på den sidste, dvs. mutable lagerklasse.

kun php-udskrivningsværdier

Omskiftelig opbevaringsklasse

Mutable specifier gælder kun for klasseobjekter, som tillader et medlem af et objekt at tilsidesætte const-medlem-funktionen. Det vil sige, at et mutabelt medlem kan modificeres af en const-medlem-funktion.

Lad os endelig se på sammenligningstabellen for at forstå forskellene mellem forskellige lagerklasser.

Opbevaringsklasse

Nøgleord

Livstid

Sigtbarhed

Startværdi

Automatisk

auto

Funktionsblok

Lokal

Affald

Ekstern

ekstern

Hele programmet

Global

Nul

Statisk

generere en tilfældig streng java

statisk

Hele programmet

Lokal

Nul

Tilmeld

Tilmeld

Funktionsblok

Lokal

Affald

Omskiftelig

kan ændres

Klasse

Lokal

Affald

Efter at have gennemgået ovenstående C ++ - programmer, ville du have forstået, hvad der er forskellige lagerklasser i C ++ og hvordan man implementerer dem. Jeg håber, at denne blog er informativ og merværdi for dig.

Således er vi nået til en afslutning på denne artikel om 'Lagerklasser i C ++'.

Hvis du ønsker at lære mere, skal du tjekke af Edureka, et betroet online læringsfirma. Edurekas Java J2EE- og SOA-uddannelses- og certificeringskursus er designet til at træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-rammer som Hibernate & Spring.

Har du et spørgsmål til os? Nævn det i kommentarsektionen på denne blog, og vi vender tilbage til dig hurtigst muligt.