Ce este o clasă de stocare în C ++ și tipurile sale?



În acest blog de clase de stocare, vom analiza diferite clase de stocare utilizate în C ++, cum ar fi auto, registru, static, extern și mutabil cu exemple.

Clasa de depozitare în C ++ definește durata de viață și vizibilitatea variabilei / funcțiilor. Durata de viață este durata până la care variabila rămâne activă și vizibilitatea este accesibilitatea unei variabile din diferite module ale programului. Acest ajută la urmărirea existenței unei anumite variabile în timpul rulării unui program. În acest blog de clase de stocare, vom analiza diferite clase de stocare utilizate în C ++.

Sa incepem.





Ce este clasa de stocare în C ++?

Fiecare variabilă din C ++ are tipul de date și clasa de stocare. Tipul de date specifică tipul de date care pot fi stocate într-o variabilă, cum ar fi int, float, char etc. Clasa de stocare controlează două proprietăți diferite ale unei variabile: durata de viață și domeniul de aplicare.

Ați fi văzut că fiecare variabilă are un tip de date, dar este posibil să nu fi văzut până acum nicio clasă de stocare atașată unei variabile. De fapt, dacă nu definiți o clasă de stocare, compilatorul îi atribuie automat o clasă de stocare implicită. Clasa de stocare a unei variabile oferă informații despre locația de stocare a variabilei în memorie, valoarea inițială implicită, domeniul de aplicare al variabilei și durata de viață a acesteia.



Tipuri de clase de stocare

Există cinci clase de stocare într-un program C ++:

  • auto
  • Inregistreaza-te
  • static
  • extern
  • mutabil

Să discutăm fiecare dintre clasele de stocare în detaliu.

Clasa de stocare automată

Clasa de stocare automată (automată) este clasa de stocare implicită pentru toate variabilele locale, care sunt declarate în interiorul unei funcții sau a unui bloc. Cuvântul cheie automat este rar folosit în timpul scrierii unui Program C ++ .



Domeniul de aplicare al variabilelor automate se află în funcția sau blocul în care au fost declarate și nu poate fi accesat în afara funcției sau blocului respectiv. Poate fi accesat și în blocuri imbricate în cadrul blocului / funcției părinte în care a fost declarată variabila automată.

Puteți accesa variabile automate în afara domeniului lor de aplicare folosind o variabilă pointer. Trebuie să indicați aceeași locație de memorie în care se află variabilele.

Durata sa de viață este aceeași cu durata de funcționare a funcției. Odată ce executarea unei funcții este terminată, variabila este distrusă.

În mod implicit, valoarea de gunoi le este atribuită în timpul declarației.

Sintaxă:

tip de date var_name1 [= valoare]

sau

tip de date auto var_name1 [= valoare]

În exemplul de mai sus, două variabile sunt definite cu aceeași clasă de stocare. Auto poate fi utilizat numai pentru a defini variabilele locale, adică în cadrul funcțiilor.

Înregistrați clasa de stocare

După cum sugerează și numele, clasa de stocare a registrului este utilizată pentru a declara variabilele de registru. Toate funcționalizările variabilei de registru sunt aceleași cu variabila automată, cu excepția faptului că compilatorul încearcă să stocheze aceste variabile în registrul microprocesorului dacă este disponibil un registru gratuit. Dacă un registru gratuit nu este disponibil, acestea sunt stocate numai în memorie.

Astfel, operațiile asupra variabilelor de registru sunt mult mai rapide decât cele ale altor variabile care sunt stocate în memorie în timpul rulării programului.

În general, puține variabile care trebuie accesate frecvent într-un program sunt declarate în clasa de stocare a registrului pentru a îmbunătăți timpul de rulare al programului. Adresa unei variabile de registru nu poate fi obținută folosind pointeri.

Dimensiunea maximă a variabilei este egală cu dimensiunea registrului (adică aproximativ un cuvânt). Nu poate avea un operator unar „&” aplicat, deoarece nu are o locație de memorie.

Sintaxă:

înregistrare tip de date var_name1 [= valoare]

Exemplu:

cum se instalează php 7 pe Windows 10
{register int pi}

Definirea „registru” nu înseamnă că variabila va fi stocată într-un registru. Poate fi stocat într-un registru în funcție de restricțiile hardware și de implementare.

Să vedem un exemplu de clase de înregistrare și stocare automată.

Exemplu:

#include folosirea spațiului de nume std // declararea variabilei care urmează să fie realizată extern // o valoare inițială poate fi, de asemenea, inițializată la x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // declararea unei variabile auto (pur și simplu // scrierea „int a = 32” funcționează și) int num = 32 // tipărirea variabilei automate „a” printf („Valoarea variabilei„ num ”” declarată ca auto:% dn ”, num) printf ( '--------------------------------')} void registerStorageClass () {printf ('nDemonstrating classnn register') / / declararea unei variabile de registru registru char c = 'G' // imprimarea variabilei de registru 'b' printf ('Valoarea variabilei' c '' 'declarată ca registru:% dn', c) printf ('---- ---------------------------- ')} int main () {// Pentru a demonstra auto Storage Class autoStorageClass () // Pentru a demonstra înregistrare Clasă de stocare registerStorageClass () return 0}

Ieșire:

Ieșire - Clasa de stocare în C ++ - EdurekaClasa de depozitare statică

Clasa de stocare statică este utilizată pentru a declara variabile statice . Variabilele statice își păstrează valoarea (adică ultima valoare) chiar și atunci când sunt în afara domeniului lor de aplicare. Variabilele statice sunt inițializate o singură dată &există până la terminarea programului.

Memoria este alocată o singură dată variabilei statice și nu este alocată nici o memorie nouă deoarece nu sunt declarate din nou. Variabilele statice globale pot fi accesate oriunde în program. În mod implicit, li se atribuie valoarea 0 de către compilator.

În C ++, când static este utilizat pe un membru de date de clasă, acesta face ca o singură copie a acelui membru să fie partajată de toate obiectele clasei sale.

Sintaxă:

tip de date static var_name1 [= valoare]

Exemplu:

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

Ieșire:

Clasa de depozitare externă

Clasa de stocare externă este necesară atunci când variabilele trebuie partajate între mai multe fișiere. Variabilele externe au scop global și aceste variabile sunt vizibile în afara fișierului în care sunt declarate. Variabila externă este vizibilă pentru toate programele. Se utilizează dacă două sau mai multe fișiere partajează aceeași variabilă sau funcție.

Durata de viață a variabilelor externe este atâta timp cât programul în care este declarată este terminat. O variabilă globală normală poate fi făcută și externă plasând cuvântul cheie „extern” înainte de declarație / definiție în orice funcție / bloc.

Când utilizați „extern”, variabila nu poate fi inițializată, deoarece nu face decât să îndrepte numele variabilei către o locație de stocare care a fost definită anterior.

Sintaxă

tip de date extern var_name1

Exemplu

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

Al doilea fișier: support.cpp

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

Aici, cuvântul cheie extern este folosit pentru a declara cnt într-un alt fișier. Acum compilați aceste două fișiere după cum urmează & minus

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

Aceasta va produce programul executabil de scriere, încercați să executați scrierea și verificați rezultatul după cum urmează & minus

$. / scrie

5

Continuând cu clasa de stocare în C ++, să aruncăm o privire la ultima, adică la clasa de stocare mutabilă.

Clasa de depozitare mutabilă

Specificatorul mutabil se aplică numai obiectelor clasei, ceea ce permite unui membru al unui obiect să suprascrie funcția membru const. Adică, un membru mutabil poate fi modificat de o funcție de membru const.

În cele din urmă, să analizăm tabelul de comparație pentru a înțelege diferențele dintre diferitele clase de stocare.

Clasa de depozitare

Cuvânt cheie

Durata de viață

java ce este un vector

Vizibilitate

Valoarea initiala

Automat

auto

Bloc funcțional

Local

Gunoi

Extern

extern

Program întreg

Global

Zero

Static

static

Program întreg

Local

Zero

Inregistreaza-te

care este exemplul unei clase în java

Inregistreaza-te

Bloc funcțional

Local

Gunoi

Mutabil

mutabil

Clasă

Local

Gunoi

Acum, după ce ați parcurs programele C ++ de mai sus, ați fi înțeles care sunt diferitele clase de stocare în C ++ și cum să le implementați. Sper că acest blog vă este informativ și cu valoare adăugată.

Astfel am ajuns la sfârșitul acestui articol despre „Clase de stocare în C ++”.

Dacă doriți să aflați mai multe, consultați de Edureka, o companie de învățare online de încredere. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog și vă vom răspunde cât mai curând posibil.