Mi az a tárolási osztály a C ++ kategóriában és típusai?



Ebben a tárolási osztályok blogjában a C ++ nyelven használt különféle tárolási osztályokat fogjuk megvizsgálni, például az auto, register, static, extern és mutable példákkal.

Tárolási osztály C ++ meghatározza a változó / függvények élettartamát és láthatóságát. Az élettartam az az időtartam, amelyig a változó aktív marad, a láthatóság pedig a program különböző moduljaiból származó változó hozzáférhetősége. Ez segít nyomon követni egy adott változó létezését a program futása alatt. Ebben a tárolási osztályok blogjában megvizsgáljuk a C ++ rendszerben használt különféle tárolási osztályokat.

Kezdjük.





Mi a tárolási osztály a C ++ kategóriában?

A C ++ minden változójának van adattípusa és tárolási osztálya. Az adattípus megadja a változóban tárolható adatok típusát, például int, float, char stb. A tárolási osztály a változó két különböző tulajdonságát vezérli: élettartam és hatókör.

Láthatta volna, hogy minden változónak van egy adattípusa, de lehet, hogy eddig nem látott egy változóhoz csatolt tárolási osztályt. Valójában, ha nem definiál egy tárolási osztályt, a fordító automatikusan hozzárendel hozzá egy alapértelmezett tárolási osztályt. A változó tárolási osztálya információt nyújt a változó tárolási helyéről a memóriában, az alapértelmezett kezdeti értékről, a változó hatóköréről és élettartamáról.



Tárolási osztály típusai

Öt tárolási osztály van egy C ++ programban:

  • auto
  • Regisztráció
  • statikus
  • külső
  • változékony

Beszéljük meg részletesen a tárolási osztályokat.

Automatikus tárolási osztály

Az automatikus (automatikus) tárolási osztály az összes helyi változó alapértelmezett tárolási osztálya, amelyeket egy függvény vagy blokk belsejében deklarálunk. Az auto kulcsszót ritkán használják a C ++ program .



Az automatikus változók hatóköre azon a függvényen vagy blokkon belül van, ahol deklarálták őket, és nem érhető el ezen a függvényen vagy blokkon kívül. Hozzáférhet beágyazott blokkokon belül azon szülőblokkon / függvényen belül, amelyben az automatikus változót deklarálták.

A hatókörükön kívüli automatikus változókhoz mutatóváltozóval férhet hozzá. Ugyanarra a memóriahelyre kell mutatnia, ahol a változók tartózkodnak.

Élettartama megegyezik a funkció élettartamával. A függvény végrehajtásának befejezése után a változó megsemmisül.

Alapértelmezés szerint a szemét értéke a deklarálás során hozzájuk van rendelve.

Szintaxis:

adattípus var_name1 [= érték]

vagy

automatikus adattípus var_name1 [= érték]

A fenti példában két változót definiálunk ugyanazzal a tárolási osztállyal. Az Auto csak helyi változók, azaz a függvényeken belüli meghatározására használható.

Regisztrálja a tárolási osztályt

Ahogy a neve is sugallja, a regiszter tároló osztályt használják a regiszter változók deklarálásához. A regiszterváltozó összes funkcionalizálása megegyezik az automatikus változóval, azzal a különbséggel, hogy a fordító megpróbálja ezeket a változókat a mikroprocesszor regiszterében tárolni, ha rendelkezésre áll egy szabad regiszter. Ha nem áll rendelkezésre ingyenes regisztráció, akkor ezeket csak a memória tárolja.

Így a regiszterváltozókkal végzett műveletek sokkal gyorsabbak, mint a program futás közben a memóriában tárolt többi változóé.

Általában kevés olyan változót jelentenek be a nyilvántartási osztályon belül, amelyekhez gyakran hozzá kell férni egy programban, hogy javítsák a program futási idejét. A regiszterváltozó címe mutatóval nem szerezhető be.

A változó maximális mérete megegyezik a regiszter méretével (azaz körülbelül egy szóval). Nem lehet rá alkalmazni az unárikus „&” operátort, mivel nincs memóriahelye.

Szintaxis:

regisztrálja a var_name1 [= érték] adattípust

Példa:

java mi a vektor
{register int pi}

A „regisztráció” meghatározása nem jelenti azt, hogy a változó egy regiszterben lesz tárolva. Lehet, hogy a hardvertől és a megvalósítási korlátozásoktól függően egy nyilvántartásban tárolja.

Nézzünk meg egy példát a regisztrációs és automatikus tárolási osztályokra.

Példa:

#include névtér használatával std // az externek készítendő változó deklarálása // egy belső érték inicializálható x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // automatikus változó deklarálása // az 'int a = 32' írása is működik) int num = 32 // az 'a' printf ('auto' -nak deklarált 'num' változó értéke:% dn ', num) automatikus változó nyomtatása printf ( '--------------------------------')} void registerStorageClass () {printf ('nDemonstrating registernnnn') / / nyilvántartási változó deklarálása regisztráció char c = 'G' // a 'b' printf regiszterváltozó kinyomtatása ('regiszterként deklarált' c 'változó értéke:% dn', c) printf ('---- ---------------------------- ')} int main () {// Az Auto Storage Class autoStorageClass () bemutatásához // register Storage Class registerStorageClass () return 0}

Kimenet:

Kimenet - Tárolási osztály C ++ nyelven - EdurekaStatikus tárolási osztály

A deklaráláshoz a statikus tárolási osztályt használják statikus változók . A statikus változók megőrzik értéküket (vagyis az utolsó értéket) akkor is, ha kívül esnek a hatókörön. A statikus változókat csak egyszer inicializáljákprogram leállításáig léteznek.

A memória csak egyszer van kiosztva a statikus változóhoz, és nincs új memória kiosztva, mert azokat nem deklarálják újra. A globális statikus változók a program bárhol elérhetők. Alapértelmezés szerint a fordító a 0 értéket rendeli hozzá.

A C ++ - ban, amikor a static egy osztály adattagján van használva, akkor ennek a tagnak csak egy példányát osztja meg az osztály összes objektuma.

Szintaxis:

statikus adattípus var_name1 [= érték]

Példa:

#include void függvény (void) static int c = 5 // Globális statikus változó main () {while (c--) {function ()} return 0} void függvény (void) {static int cnt = 2 cnt ++ std :: cout<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

Kimenet:

Külső tárolási osztály

A külső tárolóosztályra akkor van szükség, ha a változókat több fájlban kell megosztani. A külső változók globális hatókörűek, és ezek a változók azon a fájlon kívül láthatók, amelyben deklarálták. A külső változó az összes program számára látható. Akkor használatos, ha két vagy több fájl ugyanazt a változót vagy funkciót használja.

A külső változók élettartama mindaddig tart, amíg a program, amelyben deklarálták, befejeződik. A normál globális változó externek is készíthető, ha az „extern” kulcsszót bármelyik funkcióban / blokkban deklarációja / definíciója elé helyezi.

Az „extern” használatakor a változó nem inicializálható, mivel csupán a változó nevét egy korábban meghatározott tárolóhelyre irányítja.

Szintaxis

külső adattípus var_name1

Példa

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

Második fájl: support.cpp

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

Itt egy extern kulcsszót használnak a cnt deklarálására egy másik fájlban. Most állítsa össze ezt a két fájlt az alábbiak szerint és mínusz

$ g ++ main.cpp support.cpp -o ír

Ez létrehoz egy írható futtatható programot, megpróbálja végrehajtani az írást, és ellenőrizze az eredményt az alábbiak szerint:

$. / ír

statikus tagfüggvény c ++ - ban

5.

Haladva a tárolási osztály C ++ nyelven, vessünk egy pillantást az utolsóra, azaz a Mutable storage class-ra.

Változtatható tárolási osztály

A mutábilis specifikátor csak az osztályobjektumokra vonatkozik, amely lehetővé teszi egy objektum egyik tagjának, hogy felülírja az const tagfüggvényt. Vagyis egy módosítható tag módosítható egy konst tagfüggvény segítségével.

Végül nézzük meg az összehasonlító táblázatot, hogy megértsük a különböző tárolási osztályok közötti különbségeket.

Tárolási osztály

Kulcsszó

Élettartam

Láthatóság

Kezdő érték

Automatikus

auto

Funkcióblokk

Helyi

Szemét

Külső

külső

Egész program

Globális

fibonacci sorozat kód Java-ban

Nulla

Statikus

statikus

Egész program

Helyi

Nulla

Regisztráció

Regisztráció

Funkcióblokk

Helyi

Szemét

Változékony

változékony

Osztály

Helyi

Szemét

A fenti C ++ programok áttekintése után megértette volna, hogy melyek a C ++ különböző tárolási osztályai, és hogyan kell azokat megvalósítani. Remélem, hogy ez a blog informatív és hozzáadott értéket jelent Önnek.

Így a „Tárolási osztályok a C ++ kategóriában” című cikk végéhez érkeztünk.

Ha többet szeretne megtudni, nézze meg a Edureka, egy megbízható online tanulási társaság. Az Edureka Java J2EE és SOA képzési és tanúsítási tanfolyamát arra tervezték, hogy mind az alapvető, mind a fejlett Java koncepciókra kiképezzen különféle Java keretrendszereket, például a Hibernate & Spring.

Van egy kérdésünk? Kérjük, említse meg a blog megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.