Co je třída úložiště v C ++ a její typy?

V tomto blogu tříd úložiště se podíváme na různé třídy úložiště používané v C ++, například auto, register, static, extern a mutable s příklady.

Třída skladování v C ++ definuje životnost a viditelnost proměnné / funkcí. Životnost je doba, do které proměnná zůstane aktivní a viditelnost je přístupnost proměnné z různých modulů programu. Tento pomáhá sledovat existenci určité proměnné za běhu programu. V tomto blogu tříd úložišť se podíváme na různé třídy úložišť používané v C ++.

Pojďme začít.





Co je třída úložiště v C ++?

Každá proměnná v C ++ má datový typ a třídu úložiště. Datový typ určuje typ dat, která lze uložit do proměnné, jako je int, float, char atd. Třída úložiště řídí dvě různé vlastnosti proměnné: životnost a rozsah.

Viděli byste, že každá proměnná má datový typ, ale možná jste dosud neviděli žádnou třídu úložiště připojenou k proměnné. Ve skutečnosti, pokud nedefinujete třídu úložiště, kompilátor jí automaticky přiřadí výchozí třídu úložiště. Třída úložiště proměnné poskytuje informace o umístění úložiště proměnné v paměti, výchozí počáteční hodnotu, rozsah proměnné a její životnost.



Druhy třídy úložiště

V C ++ programu je pět tříd úložiště:

  • auto
  • Registrovat
  • statický
  • externí
  • proměnlivý

Pojďme si podrobně promluvit o každé z tříd úložiště.

Třída automatického ukládání

Automatická (automatická) třída úložiště je výchozí třída úložiště pro všechny místní proměnné, které jsou deklarovány uvnitř funkce nebo bloku. Při psaní a se klíčové slovo auto používá jen zřídka Program v C ++ .



Rozsah automatických proměnných je ve funkci nebo bloku, kde byly deklarovány, a nelze k nim přistupovat mimo tuto funkci nebo blok. Lze k ní přistupovat také ve vnořených blocích v rámci nadřazeného bloku / funkce, ve které byla deklarována automatická proměnná.

K automatickým proměnným mimo jejich rozsah můžete přistupovat pomocí proměnné ukazatele. Musíte ukázat na stejné místo v paměti, kde se nacházejí proměnné.

Jeho životnost je stejná jako životnost funkce. Po dokončení provádění funkce je proměnná zničena.

Ve výchozím nastavení je jim při deklaraci přiřazena nesmyslná hodnota.

Syntax:

datový typ var_name1 [= hodnota]

nebo

auto datatype var_name1 [= hodnota]

Ve výše uvedeném příkladu jsou dvě proměnné definovány se stejnou třídou úložiště. Auto lze použít pouze k definování lokálních proměnných, tj. V rámci funkcí.

Zaregistrujte třídu úložiště

Jak název napovídá, třída úložiště registrů se používá k deklaraci proměnných registru. Celá funkcionalita proměnné registru je stejná jako proměnná auto kromě toho, že se kompilátor pokusí uložit tyto proměnné do registru mikroprocesoru, pokud je k dispozici volný registr. Pokud není k dispozici bezplatný registr, uloží se pouze do paměti.

Operace s proměnnými registru jsou tedy mnohem rychlejší než operace s jinými proměnnými, které jsou uloženy v paměti během běhu programu.

Obecně je v rámci třídy úložiště registrů deklarováno několik proměnných, ke kterým je třeba v programu často přistupovat, aby se zlepšila doba chodu programu. Adresu proměnné registru nelze získat pomocí ukazatelů.

Maximální velikost proměnné se rovná velikosti registru (tj. Přibližně jedno slovo). Nemůže na něj být použit unární operátor „&“, protože nemá místo v paměti.

Syntax:

zaregistrovat datový typ var_name1 [= hodnota]

Příklad:

co je vyhrazené slovo v Javě
{register int pi}

Definování „registru“ neznamená, že proměnná bude uložena v registru. Může být uložen v registru v závislosti na hardwaru a omezeních implementace.

Podívejme se na příklad tříd registrace a automatického ukládání.

Příklad:

#include using namespace std // declaring the variable which is to be made extern // intial value can also be initialized to x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // deklarace automatické proměnné (jednoduše // psaní také 'int a = 32') int num = 32 // tisk automatické proměnné 'a' printf ('Hodnota proměnné' num '' 'deklarované jako auto:% dn', num) printf ( '--------------------------------')} void registerStorageClass () {printf ('nDemonstrating register classnn') / / deklarace proměnné registru register char c = 'G' // tisk proměnné registru 'b' printf ('hodnota proměnné' c '' 'deklarovaná jako registr:% dn', c) printf ('---- ---------------------------- ')} int main () {// Ukázka automatické třídy úložiště autoStorageClass () // Ukázka register Storage Class registerStorageClass () návrat 0}

Výstup:

Výstup - třída úložiště v C ++ - EdurekaStatická třída skladování

Třída statického úložiště se používá k deklaraci statické proměnné . Statické proměnné zachovávají svou hodnotu (tj. Poslední hodnotu), i když jsou mimo jejich rozsah. Statické proměnné jsou inicializovány pouze jednou &existují až do ukončení programu.

Paměť je přidělena statické proměnné pouze jednou a není přidělena žádná nová paměť, protože nejsou znovu deklarovány. Globální statické proměnné jsou přístupné kdekoli v programu. Ve výchozím nastavení jim kompilátor přiděluje hodnotu 0.

V jazyce C ++, když se statický použije na datovém členu třídy, způsobí to, že všechny objekty jeho třídy budou sdíleny pouze jednu kopii tohoto člena.

Syntax:

statický datový typ var_name1 [= hodnota]

Příklad:

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

Výstup:

Třída externího úložiště

Třída externího úložiště je vyžadována, když je třeba proměnné sdílet mezi více soubory. Externí proměnné mají globální rozsah a tyto proměnné jsou viditelné mimo soubor, ve kterém jsou deklarovány. Externí proměnná je viditelná pro všechny programy. Používá se, pokud dva nebo více souborů sdílí stejnou proměnnou nebo funkci.

Životnost externích proměnných je tak dlouhá, dokud je ukončen program, ve kterém je deklarována. Normální globální proměnnou lze vytvořit i externě umístěním klíčového slova „extern“ před jeho deklaraci / definici do jakékoli funkce / bloku.

jak používat br v html

Pokud použijete výraz „extern“, proměnnou nelze inicializovat, protože stačí namířit název proměnné na místo úložiště, které bylo dříve definováno.

Syntax

externí datový typ var_name1

Příklad

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

Druhý soubor: support.cpp

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

Zde se externí klíčové slovo používá k deklaraci cnt v jiném souboru. Nyní tyto dva soubory zkompilujte následovně & minus

$ g ++ main.cpp support.cpp -o zápis

Tím se vytvoří spustitelný program pro zápis, pokuste se provést zápis a zkontrolujte výsledek následujícím způsobem & minus

$. / zápis

5

Pokračujeme třídou úložiště v C ++, podívejme se na poslední, tj. Třídu úložiště Mutable.

Proměnlivá třída úložiště

Mutovatelný specifikátor platí pouze pro objekty třídy, což umožňuje členovi objektu přepsat const členskou funkci. To znamená, že proměnlivý člen lze upravit funkcí člena const.

Nakonec se podívejme na srovnávací tabulku, abychom pochopili rozdíly mezi různými třídami úložiště.

Třída skladování

Klíčové slovo

Život

Viditelnost

Počáteční hodnota

Automatický

auto

Funkční blok

Místní

Odpadky

Externí

externí

Celý program

Globální

Nula

Statický

statický

Celý program

Místní

Nula

Registrovat

Registrovat

Funkční blok

Místní

Odpadky

Proměnlivý

proměnlivý

Třída

Místní

Odpadky

c ++ třídicí pole

Nyní po projití výše uvedenými programy C ++ byste pochopili, jaké jsou různé třídy úložiště v C ++ a jak je implementovat. Doufám, že tento blog bude informativní a bude pro vás přidanou hodnotou.

Tak jsme dospěli ke konci tohoto článku o „Třída úložiště v C ++“.

Pokud se chcete dozvědět více, podívejte se na Edureka, důvěryhodná online vzdělávací společnost. Školicí a certifikační kurz Edureka Java J2EE a SOA je navržen tak, aby vás vyškolil jak pro základní, tak pro pokročilé koncepty Java spolu s různými rámci Java, jako je Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto blogu a my se vám ozveme co nejdříve.