Vad är en lagringsklass i C ++ och dess typer?



I denna blogg för lagringsklasser kommer vi att titta på olika lagringsklasser som används i C ++ som auto, register, statisk, extern och muterbar med exempel.

Förvaringsklass i C ++ definierar livslängden och synligheten för variabeln / funktionerna. Livstid är den varaktighet till vilken variabeln förblir aktiv och synlighet är tillgängligheten för en variabel från olika moduler i programmet. Detta hjälper till att spåra förekomsten av en viss variabel under körningen av ett program. I denna blogg om lagringsklasser kommer vi att titta på olika lagringsklasser som används i C ++.

Låt oss börja.





Vad är lagringsklass i C ++?

Varje variabel i C ++ har datatyp och lagringsklass. Datatyp anger vilken typ av data som kan lagras i en variabel som int, float, char etc. Lagringsklass styr två olika egenskaper hos en variabel: livstid och omfattning.

Du skulle ha sett att varje variabel har en datatyp, men du kanske inte har sett någon lagringsklass kopplad till en variabel hittills. Om du inte definierar en lagringsklass tilldelar kompilatorn automatiskt en standardlagringsklass till den. En variabelns lagringsklass ger information om variabelns lagringsplats i minnet, standardstartvärde, variabelns omfattning och dess livstid.



Typer av lagringsklass

Det finns fem lagringsklasser i ett C ++ - program:

  • bil
  • Registrera
  • statisk
  • extern
  • föränderlig

Låt oss diskutera var och en av lagringsklasserna i detalj.

Klass för automatisk lagring

Automatisk (automatisk) lagringsklass är standardlagringsklassen för alla lokala variabler, som deklareras i en funktion eller ett block. Auto-nyckelordet används sällan när du skriver a C ++ - programmet .



Omfattningen av auto-variabler ligger inom funktionen eller blocket där de har deklarerats och det kan inte nås utanför den funktionen eller blocket. Det kan också nås inom kapslade block inom det överordnade blocket / funktionen där den automatiska variabeln deklareras.

Du kan komma åt automatiska variabler utanför deras omfång med en pekervariabel. Du måste peka på samma minnesplats där variablerna finns.

Dess livstid är densamma som funktionens livstid. När körningen av en funktion är klar förstörs variabeln.

Som standard tilldelas skräpvärde dem under deklarationen.

Syntax:

datatyp var_name1 [= värde]

eller

automatisk datatyp var_name1 [= värde]

I exemplet ovan definieras två variabler med samma lagringsklass. Auto kan endast användas för att definiera lokala variabler, dvs inom funktioner.

Registrera lagringsklass

Som namnet antyder används registerlagringsklassen för att deklarera registervariabler. All funktionalisering av registervariabeln är densamma som den automatiska variabeln förutom att kompilatorn försöker lagra dessa variabler i mikroprocessorns register om ett gratisregister finns tillgängligt. Om ett gratisregister inte är tillgängligt lagras dessa endast i minnet.

Således är operationer på registervariabler mycket snabbare än för andra variabler som lagras i minnet under körningstiden för programmet.

Vanligtvis deklareras få variabler som behöver nås ofta i ett program inom registerlagringsklassen för att förbättra programmets körtid. Adressen till en registervariabel kan inte erhållas med hjälp av pekare.

Den maximala storleken på variabeln är lika med storleken på registret (dvs. ett ord ungefär). Det kan inte ha en unary '&' operatör tillämpad på den eftersom den inte har en minnesplats.

Syntax:

registrera datatyp var_name1 [= värde]

Exempel:

förvandla sträng till array php
{register int pi}

Att definiera ”register” betyder inte att variabeln kommer att lagras i ett register. Det kan lagras i ett register beroende på maskinvaru- och implementeringsbegränsningar.

Låt oss titta på ett exempel på register- och automatisk lagringsklasser.

Exempel:

#inkludera att använda namespace std // deklarera variabeln som ska göras extern // ett initialvärde kan också initialiseras till x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // deklarera en autovariabel // skrivning 'int a = 32' fungerar också) int num = 32 // utskrift av den automatiska variabeln 'a' printf ('Värde för variabeln' num '' 'deklarerad som auto:% dn', num) printf ( '--------------------------------')} ogiltigt registerStorageClass () {printf ('nDemonstrating register classnn') / / deklarerar ett registervariabelregister char c = 'G' // skriver ut registervariabeln 'b' printf ('Värde för variabeln' c '' 'deklarerat som register:% dn', c) printf ('---- ---------------------------- ')} int main () {// Att demonstrera automatisk lagringsklass autoStorageClass () // Att demonstrera registrera Storage Class registerStorageClass () return 0}

Produktion:

Output - Lagringsklass i C ++ - EdurekaStatisk lagringsklass

Den statiska lagringsklassen används för att deklarera statiska variabler . Statiska variabler bevarar deras värde (dvs det sista värdet) även när de är utanför deras räckvidd. Statiska variabler initialiseras bara en gång &existerar tills programmet avslutas.

Minnet allokeras endast en gång till den statiska variabeln och inget nytt minne tilldelas eftersom de inte deklareras om. Globala statiska variabler kan nås var som helst i programmet. Som standard tilldelas de värdet 0 av kompilatorn.

I C ++, när statisk används på en klassdata-medlem, orsakar det att endast en kopia av den medlemmen delas av alla objekt i sin klass.

Syntax:

statisk datatyp var_name1 [= värde]

Exempel:

#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:

Extern lagringsklass

Den externa lagringsklassen krävs när variablerna måste delas över flera filer. Externa variabler har globalt omfång och dessa variabler är synliga utanför filen där de deklareras. Den externa variabeln är synlig för alla program. Den används om två eller flera filer delar samma variabel eller funktion.

Livslängden för de externa variablerna är så länge det program i vilket deklareras avslutas. En normal global variabel kan också göras extern genom att placera 'extern' nyckelordet före dess deklaration / definition i någon funktion / block.

När du använder ”extern” kan inte variabeln initieras eftersom allt det gör är att rikta variabelnamnet på en lagringsplats som tidigare har definierats.

Syntax

extern datatype var_name1

Exempel

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

Andra filen: support.cpp

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

Här används externt nyckelord för att deklarera cnt i en annan fil. Kompilera nu dessa två filer enligt följande och minus

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

Detta kommer att producera skrivkörbart program, försök att utföra skriv och kontrollera resultatet enligt följande & minus

$. / skriv

5

När vi går vidare med lagringsklassen i C ++, låt oss ta en titt på den sista, det vill säga den mutabla lagringsklassen.

Muterbar lagringsklass

Mutable specifier gäller endast klassobjekt, vilket gör det möjligt för en medlem av ett objekt att åsidosätta const-medlemsfunktionen. Det vill säga, en muterbar medlem kan modifieras av en const-medlemsfunktion.

Till sist, låt oss titta på jämförelsetabellen för att förstå skillnaderna mellan olika lagringsklasser.

sträng till Java-användningsdatum

Lagringsklass

Nyckelord

Livstid

Synlighet

Ursprungligt värde

Automatisk

bil

Funktionsblock

Lokal

Sopor

Extern

extern

Hela programmet

Global

Noll

Statisk

statisk

Hela programmet

hur man öppnar aws cli

Lokal

Noll

Registrera

Registrera

Funktionsblock

Lokal

Sopor

Föränderlig

föränderlig

Klass

Lokal

Sopor

Efter att ha gått igenom ovanstående C ++ - program skulle du ha förstått vad som är olika lagringsklasser i C ++ och hur man implementerar dem. Jag hoppas att den här bloggen är informativ och ger ett mervärde för dig.

Således har vi kommit till slutet av den här artikeln om ”Lagringsklasser i C ++”.

Om du vill veta mer, kolla in av Edureka, ett pålitligt online-lärande företag. Edurekas Java J2EE- och SOA-utbildning och certifieringskurs är utformad för att träna dig för både grundläggande och avancerade Java-koncept tillsammans med olika Java-ramverk som Hibernate & Spring.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen på den här bloggen så kommer vi tillbaka till dig så snart som möjligt.