Mis on salvestusklass C ++ -s ja selle tüüpides?



Selles salvestusklasside ajaveebis vaatleme erinevaid C ++ -s kasutatavaid salvestusklasse, näiteks näiteid kasutades auto, register, staatiline, väline ja muudetav.

Ladustamisklass aastal C ++ määratleb muutuja / funktsioonide eluea ja nähtavuse. Eluaeg on kestus, kuni muutuja jääb aktiivseks ja nähtavus on muutuja juurdepääs programmi erinevatele moodulitele. Seda aitab jälgida konkreetse muutuja olemasolu programmi käitamise ajal. Selles hoiuklasside ajaveebis vaatleme erinevaid C ++ keeles kasutatavaid salvestusklassid.

Alustagem.



Mis on salvestusklass C ++ -s?

Igal C ++ muutujal on andmetüüp ja salvestusklass. Andmetüüp määrab andmete tüübi, mida saab muutujasse salvestada, näiteks int, float, char jne. Salvestusklass kontrollib muutuja kahte erinevat omadust: eluiga ja ulatus.

Oleksite näinud, et kõigil muutujatel on andmetüüp, kuid te pole võib-olla seni näinud ühtegi muutujale lisatud mäluklassi. Tegelikult, kui te ei määra salvestusklassi, määrab kompilaator sellele automaatselt vaikimisi salvestusklassi. Muutuja salvestusklass annab teavet muutuja salvestuspaiga kohta mälus, vaikimisi algväärtuse, muutuja ulatuse ja eluea kohta.



Ladustamisklassi tüübid

C ++ programmis on viis salvestusklassi:

  • automaatne
  • Registreeri
  • staatiline
  • väline
  • muutuv

Arutleme üksikasjalikult iga hoiuklassi üle.

Automaatne salvestusklass

Automaatne (automaatne) salvestusklass on vaikimisi salvestusklass kõigi kohalike muutujate jaoks, mis on deklareeritud funktsiooni või ploki sees. Automaatset märksõna kasutatakse a kirjutamise ajal harva C ++ programm .



Automaatmuutujate ulatus on funktsioonis või plokis, kus need on deklareeritud, ja sellele ei pääse juurde väljaspool seda funktsiooni või plokki. Sellele pääseb juurde ka pesaplokkides vanemplokis / -funktsioonis, milles automaatne muutuja deklareeriti.

Automaatsetele muutujatele pääseb väljaspool nende ulatust, kasutades kursori muutujat. Peate osutama samale mälupunktile, kus muutujad asuvad.

Selle eluiga on sama mis funktsiooni eluiga. Kui funktsiooni täitmine on lõpetatud, muutuja hävitatakse.

Vaikimisi määratakse neile deklareerimise ajal prügiväärtus.

Süntaks:

andmetüüp var_name1 [= väärtus]

või

automaatne andmetüüp var_name1 [= väärtus]

Ülaltoodud näites on kaks muutujad määratletud sama salvestusklassiga. Automaatse režiimi abil saab määratleda ainult lokaalseid muutujaid, st funktsioonide sees.

Registreerige salvestusklass

Nagu nimigi ütleb, kasutatakse registrimuutujate deklareerimiseks registrimälu klassi. Kõik registrimuutuja funktsionaliseerimine on sama, mis automaatne muutuja, välja arvatud see, et tasuta registri olemasolul proovib kompilaator neid muutujaid mikroprotsessori registrisse salvestada. Kui tasuta registrit pole saadaval, salvestatakse need ainult mällu.

Seega on registrimuutujatega toimingud palju kiiremad kui teistel muutujatel, mis on programmi tööajal mällu salvestatud.

Üldiselt deklareeritakse registri salvestusklassi üksikud muutujad, millele tuleb programmis sageli juurde pääseda, et programmi tööaega paremaks muuta. Registrimuutuja aadressi ei saa osutite abil saada.

Muutuja maksimaalne suurus on võrdne registri suurusega (st umbes üks sõna). Sellele ei saa rakendada unaarset operaatorit & & quot, kuna tal pole mälu asukohta.

Süntaks:

registreeri andmetüüp var_name1 [= väärtus]

Näide:

kuidas kirjutada skännerit javas
{registreeru int pi}

Registri määratlemine ei tähenda, et muutuja salvestatakse registrisse. Sõltuvalt riistvarast ja rakendamise piirangutest võib seda salvestada registrisse.

Vaatame registri- ja automaatse salvestamise klasside näidet.

Näide:

#include nimeruumi kasutamine std // muutuja deklareerimine, mis tehakse väliseks // intiaalväärtuse saab ka initsialiseerida x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // automaatse muutuja deklareerimine // töötab ka 'int a = 32' kirjutamine töötab) int num = 32 // automaatse muutuja 'a' printf ('muutujaks' num 'väärtus', mis on deklareeritud kui automaatne:% dn ', num) printf ( '--------------------------------')} void registerStorageClass () {printf ('nDemonstrating register classnn') / / registrimuutuja registri deklareerimine char c = 'G' // registrimuutuja 'b' printf ('registriks deklareeritud muutuja' c '' väärtus:% dn ', c) printf (' ---- ---------------------------- ')} int main () {// Automaatse salvestusklassi demonstreerimiseks autoStorageClass () // Et näidata register Storage Class registerStorageClass () return 0}

Väljund:

Väljund - ladustamisklass C ++ - EdurekaStaatiline salvestusklass

Deklareerimiseks kasutatakse staatilist salvestusklassi staatilised muutujad . Staatilised muutujad säilitavad oma väärtuse (s.t viimase väärtuse) isegi siis, kui nad jäävad oma reguleerimisalast välja. Staatilised muutujad lähtestatakse ainult üks kordeksisteerivad kuni programmi lõpetamiseni.

Staatilisele muutujale eraldatakse mälu ainult üks kord ja uut mälu ei eraldata, kuna neid ei deklareerita uuesti. Üldistele staatilistele muutujatele on juurdepääs kõikjal programmis. Vaikimisi määrab kompilaator neile väärtuse 0.

C ++ - s, kui staatilist kasutatakse klassi andmeliikmel, põhjustab see selle klassi kõigi objektide jaoks ainult selle liikme koopia jagamist.

Süntaks:

staatiline andmetüüp var_name1 [= väärtus]

Näide:

luua objekti java koopia
#include void function (void) static int c = 5 // Globaalne staatiline muutuja main () {while (c--) {function ()} return 0} void function (void) {staatiline int cnt = 2 cnt ++ std :: cout<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

Väljund:

Väline salvestusklass

Väline salvestusklass on vajalik, kui muutujaid tuleb jagada mitme faili vahel. Välised muutujad on globaalse ulatusega ja need muutujad on nähtavad väljaspool faili, milles nad on deklareeritud. Väline muutuja on nähtav kõigile programmidele. Seda kasutatakse juhul, kui kahel või enamal failil on sama muutuja või funktsioon.

Väliste muutujate eluiga on nii kaua, kuni programm, milles see deklareeritakse, lõpetatakse. Tavalise globaalse muutuja saab muuta ka väliseks, asetades märksõna extern mis tahes funktsiooni / plokki selle deklaratsiooni / definitsiooni ette.

Välise „extern” kasutamisel ei saa muutujat lähtestada, kuna kõik, mis selleks on, suunab muutuja nime eelnevalt määratletud salvestuskohta.

Süntaks

väline andmetüüp var_name1

Näide

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

Teine fail: support.cpp

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

Siin kasutatakse välist märksõna, et deklareerida cnt teises failis. Nüüd kompileerige need kaks faili järgmiselt & miinus

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

See loob kirjutatava käivitatava programmi, proovige käivitada kirjutamine ja kontrollige tulemust järgmiselt & miinus

$. / kirjuta

5

C ++ salvestusklassiga edasi liikudes heitkem pilk viimasele, s.o muutuvale salvestusklassile.

Muutuv salvestusklass

Muutuv spetsifikaator kehtib ainult klassi objektide kohta, mis võimaldab objekti liikmel alistada const-liikme funktsiooni. See tähendab, et muutuvat liiget saab muuta konst-liikme funktsioon.

Lõpuks vaatame võrdlustabelit, et mõista erinevate salvestusklasside erinevusi.

Ladustamisklass

Märksõna

Eluaeg

Nähtavus

Algne väärtus

Automaatne

automaatne

Funktsiooniplokk

Kohalik

Prügi

Väline

väline

Kogu programm

Ülemaailmne

Null

Staatiline

staatiline

Kogu programm

Kohalik

Null

Registreeri

Registreeri

Funktsiooniplokk

Kohalik

Prügi

Muutuv

muutuv

Klass

jamas hashmap ja hashtable

Kohalik

Prügi

Nüüd, olles läbinud ülaltoodud C ++ programmid, oleksite aru saanud, mis on erinevad C ++ salvestusklassid ja kuidas neid rakendada. Loodan, et see ajaveeb on informatiivne ja annab teile lisaväärtust.

Seega oleme jõudnud selle artikli lõpuni, mis käsitleb teemat „Salvestusklassid C ++ -s”.

Kui soovite rohkem teada saada, vaadake järgmist autor Edureka, usaldusväärne veebipõhine õppefirma. Edureka Java J2EE ja SOA koolitus- ja sertifitseerimiskursus on mõeldud selleks, et õpetada teid nii Java-põhimõistete kui ka edasijõudnute kontseptsioonide jaoks koos erinevate Java-raamistikega nagu Hibernate & Spring.

Kas teil on meile küsimus? Palun mainige seda selle ajaveebi kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.