Hva er en lagringsklasse i C ++ og dens typer?



I denne lagringsklassebloggen vil vi se på forskjellige lagringsklasser som brukes i C ++, for eksempel auto, register, statisk, ekstern og muterbar med eksempler.

Lagringsklasse i C ++ definerer levetiden og synligheten til variabelen / funksjonene. Lifetime er varigheten til variabelen forblir aktiv og synlighet er tilgjengeligheten til en variabel fra forskjellige moduler i programmet. Dette hjelper med å spore eksistensen av en bestemt variabel i løpet av et program. I denne lagringsklassebloggen vil vi se på forskjellige lagringsklasser som brukes i C ++.

La oss begynne.





Hva er lagringsklasse i C ++?

Hver variabel i C ++ har datatype og lagringsklasse. Datatype spesifiserer typen data som kan lagres i en variabel som int, float, char osv. Lagringsklasse styrer to forskjellige egenskaper for en variabel: levetid og omfang.

Du ville ha sett at hver variabel har en datatype, men du har kanskje ikke sett noen lagringsklasse knyttet til en variabel så langt. Hvis du ikke definerer en lagringsklasse, tildeler kompilatoren automatisk en standard lagringsklasse til den. Lagringsklassen til en variabel gir informasjon om lagringsplasseringen til variabelen i minnet, standard startverdi, variabelens omfang og levetid.



Typer lagringsklasse

Det er fem lagringsklasser i et C ++ - program:

  • auto
  • registrere
  • statisk
  • utvendig
  • foranderlig

La oss diskutere hver av lagringsklassene i detalj.

Klasse for automatisk lagring

Automatisk (automatisk) lagringsklasse er standard lagringsklasse for alle lokale variabler, som blir deklarert i en funksjon eller en blokk. Autosøkeordet brukes sjelden mens du skriver en C ++ program .



Omfanget av automatiske variabler ligger innenfor funksjonen eller blokken der de er deklarert, og den er ikke tilgjengelig utenfor den funksjonen eller blokken. Det kan også nås innenfor nestede blokker i den overordnede blokken / funksjonen der den automatiske variabelen ble deklarert.

Du kan få tilgang til automatiske variabler utenfor deres omfang ved hjelp av en pekervariabel. Du må peke på samme minneplassering der variablene ligger.

Dens levetid er den samme som funksjonens levetid. Når utførelsen av en funksjon er ferdig, blir variabelen ødelagt.

Som standard tildeles søppelverdi dem under erklæring.

Syntaks:

datatype var_name1 [= verdi]

eller

automatisk datatype var_name1 [= verdi]

I eksemplet ovenfor er to variabler definert med samme lagringsklasse. Auto kan bare brukes til å definere lokale variabler, dvs. innenfor funksjoner.

Registrer lagringsklasse

Som navnet antyder, brukes registerlagringsklassen til å erklære registervariabler. All funksjonalisering av registervariabelen er den samme som den automatiske variabelen, bortsett fra at kompilatoren prøver å lagre disse variablene i mikroprosessorregisteret hvis et gratisregister er tilgjengelig. Hvis et gratisregister ikke er tilgjengelig, lagres disse bare i minnet.

Dermed er operasjoner på registervariabler mye raskere enn andre variabler som er lagret i minnet i løpet av programmets kjøretid.

Vanligvis er det få variabler som ofte må åpnes i et program, deklareres i registerlagerklassen for å forbedre programmets kjøretid. Adressen til en registervariabel kan ikke fås ved hjelp av pekere.

Den maksimale størrelsen på variabelen er lik størrelsen på registeret (dvs. ett ord omtrent). Det kan ikke ha en unary '&' operatør brukt på den, da den ikke har en minneplassering.

Syntaks:

registrer datatype var_name1 [= verdi]

Eksempel:

hvordan lage dashbord i kraft bi
{register int pi}

Å definere ‘register’ betyr ikke at variabelen vil bli lagret i et register. Det kan lagres i et register avhengig av maskinvare og implementeringsbegrensninger.

La oss se på et eksempel på register- og automatisk lagringsklasser.

Eksempel:

# inkludere bruk av navneområde std // erklære variabelen som skal gjøres ekstern // en innledende verdi kan også initialiseres til x int x ugyldig autoStorageClass () {printf ('nDemonstrating auto classnn') // erklære en automatisk variabel // skriving 'int a = 32' fungerer også) int num = 32 // utskrift av autovariabelen 'a' printf ('Verdien av variabelen' num '' 'erklært som auto:% dn', num) printf ( '--------------------------------')} ugyldig registerStorageClass () {printf ('nDemonstrating register classnn') / / erklærer et registervariabelregister char c = 'G' // skriver ut registervariabelen 'b' printf ('Verdien av variabelen' c '' 'erklært som register:% dn', c) printf ('---- ---------------------------- ')} int main () {// For å demonstrere auto Storage Class autoStorageClass () // For å demonstrere registrer Storage Class registerStorageClass () return 0}

Produksjon:

Utgang - Lagringsklasse i C ++ - EdurekaStatisk lagringsklasse

Den statiske lagringsklassen brukes til å deklarere statiske variabler . Statiske variabler bevarer verdien (dvs. den siste verdien) selv når de er utenfor omfanget. Statiske variabler initialiseres bare en gang &eksisterer til programmet avsluttes.

Minnet tildeles bare den statiske variabelen en gang og det tildeles ikke noe nytt minne fordi de ikke blir deklarert på nytt. Globale statiske variabler er tilgjengelig hvor som helst i programmet. Som standard tildeles de verdien 0 av kompilatoren.

I C ++, når statisk brukes på et klassedatamedlem, blir det bare en kopi av det medlemmet som deles av alle objekter i klassen.

Syntaks:

statisk datatype var_name1 [= verdi]

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 } 

Produksjon:

Ekstern lagringsklasse

Den eksterne lagringsklassen kreves når variablene må deles på tvers av flere filer. Eksterne variabler har globalt omfang, og disse variablene er synlige utenfor filen de er deklarert i. Den eksterne variabelen er synlig for alle programmene. Den brukes hvis to eller flere filer deler samme variabel eller funksjon.

Levetiden til de eksterne variablene er så lenge programmet det deklareres i avsluttes. En normal global variabel kan også gjøres ekstern ved å plassere ‘ekstern’ nøkkelordet før erklæringen / definisjonen i en hvilken som helst funksjon / blokk.

hvordan du setter opp php

Når du bruker ‘ekstern’, kan ikke variabelen initialiseres, da alt det gjør er å peke variabelnavnet på et lagringssted som tidligere er definert.

Syntaks

ekstern datatype var_name1

Eksempel

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

Andre fil: support.cpp

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

Her brukes eksternt nøkkelord for å erklære cnt i en annen fil. Nå kompilerer du disse to filene som følger og minus

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

Dette vil produsere skrivekjørbart program, prøv å utføre skriv og sjekk resultatet som følger & minus

$. / skriv

5

Fortsett med lagringsklassen i C ++, la oss ta en titt på den siste, det vil si mutable lagringsklassen.

Muterbar lagringsklasse

Muterbar spesifikator gjelder bare for klasseobjekter, som lar et medlem av et objekt overstyre const-medlem-funksjonen. Det vil si at et foranderlig medlem kan modifiseres av en const-medlemsfunksjon.

Til slutt, la oss se på sammenligningstabellen for å forstå forskjellene mellom forskjellige lagringsklasser.

Lagringsklasse

Nøkkelord

Livstid

Synlighet

Opprinnelig verdi

Automatisk

auto

Funksjonsblokk

Lokalt

Søppel

Utvendig

utvendig

Hele programmet

Global

Null

Statisk

statisk

Hele programmet

Lokalt

Null

Registrere

registrere

Funksjonsblokk

Lokalt

Søppel

Muterbar

foranderlig

Klasse

Lokalt

Søppel

Nå etter å ha gått gjennom ovennevnte C ++ - programmer, ville du ha forstått hva som er forskjellige lagringsklasser i C ++ og hvordan du implementerer dem. Jeg håper denne bloggen er informativ og gir merverdi for deg.

Dermed har vi kommet til en slutt på denne artikkelen om ‘Lagringsklasser i C ++’.

html-tag for å sette inn et linjeskift

Hvis du ønsker å lære mer, sjekk ut av Edureka, et pålitelig online læringsfirma. Edurekas Java J2EE- og SOA-opplærings- og sertifiseringskurs er designet for å trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Spring.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet på denne bloggen, så kommer vi tilbake til deg så snart som mulig.