Kas yra saugojimo klasė C ++ ir jos tipuose?



Šiame saugojimo klasių tinklaraštyje apžvelgsime įvairias C ++ sistemoje naudojamas saugojimo klases, tokias kaip „auto“, „register“, „static“, „extern“ ir „mutable“ su pavyzdžiais.

Sandėliavimo klasė C ++ apibrėžia kintamojo / funkcijų gyvenimo trukmę ir matomumą. Gyvenimo trukmė yra trukmė, iki kurios kintamasis lieka aktyvus, o matomumas yra kintamojo prieinamumas iš skirtingų programos modulių. Tai padeda atsekti konkretaus kintamojo egzistavimą programos vykdymo metu. Šiame saugojimo klasių tinklaraštyje apžvelgsime įvairias saugojimo klases, naudojamas C ++.

Pradėkime.





Kas yra C ++ laikymo klasė?

Kiekvienas C ++ kintamasis turi duomenų tipą ir saugojimo klasę. Duomenų tipas nurodo duomenų, kuriuos galima saugoti kintamajame, pvz., Int, float, char ir kt., Tipą. Saugojimo klasė valdo dvi skirtingas kintamojo savybes: gyvenimo trukmę ir taikymo sritį.

Jūs būtumėte matę, kad kiekvienas kintamasis turi duomenų tipą, bet galbūt iki šiol nematėte jokios prie kintamojo prijungtos saugyklos klasės. Tiesą sakant, jei neapibrėžiate saugyklos klasės, kompiliatorius jai automatiškai priskiria numatytąją saugyklos klasę. Kintamojo saugojimo klasė suteikia informaciją apie kintamojo saugojimo vietą atmintyje, numatytąją pradinę vertę, kintamojo taikymo sritį ir jo tarnavimo laiką.



Sandėliavimo klasės tipai

„C ++“ programoje yra penkios saugojimo klasės:

  • automatinis
  • Registruotis
  • statinis
  • išorinis
  • kintamas

Išsamiai aptarkime kiekvieną saugojimo klasę.

Automatinio saugojimo klasė

Automatinė (automatinė) saugyklos klasė yra numatytoji visų vietinių kintamųjų, nurodytų funkcijos ar bloko viduje, saugojimo klasė. Automatinis raktinis žodis retai naudojamas rašant a C ++ programa .



Automatinių kintamųjų taikymo sritis yra funkcijoje arba bloke, kur jie buvo deklaruoti, ir prie jo negalima prisijungti už tos funkcijos ar bloko ribų. Jį taip pat galima pasiekti per įdėtus blokus pirminiame bloke / funkcijoje, kurioje buvo deklaruotas automatinis kintamasis.

Galite pasiekti automatinius kintamuosius už jų srities ribų naudodami rodyklės kintamąjį. Turite nurodyti tą pačią atminties vietą, kurioje yra kintamieji.

Jo tarnavimo laikas yra tas pats, kaip funkcijos veikimo laikas. Baigus vykdyti funkciją, kintamasis sunaikinamas.

Pagal numatytuosius nustatymus šiukšlių vertė jiems priskiriama deklaruojant.

Sintaksė:

duomenų tipas var_name1 [= reikšmė]

arba

automatinis duomenų tipas var_name1 [= reikšmė]

Ankstesniame pavyzdyje du kintamieji yra apibrėžti ta pačia saugojimo klase. Automatinis gali būti naudojamas tik apibrėžiant vietinius kintamuosius, t. Y. Funkcijose.

Užregistruokite saugyklos klasę

Kaip rodo pavadinimas, registrų kintamiesiems deklaruoti naudojama registro saugyklos klasė. Visi registro kintamojo funkcionalizavimai yra tokie patys kaip automatiniai kintamieji, išskyrus tai, kad kompiliatorius bando šiuos kintamuosius išsaugoti mikroprocesoriaus registre, jei yra nemokamas registras. Jei nemokamo registro nėra, jie tada saugomi tik atmintyje.

Taigi operacijos su registro kintamaisiais yra daug greitesnės nei kitų kintamųjų, kurie saugomi atmintyje programos vykdymo metu.

Paprastai, norint pagerinti programos veikimo laiką, registrų saugyklos klasėje deklaruojami keli kintamieji, prie kurių reikia dažnai prisijungti programoje. Registro kintamojo adreso negalima gauti naudojant rodykles.

Maksimalus kintamojo dydis yra lygus registro dydžiui (t. Y. Maždaug vienam žodžiui). Joje negali būti pritaikytas vienarūšis operatorius „&“, nes jis neturi atminties vietos.

Sintaksė:

registruoti duomenų tipą var_name1 [= reikšmė]

Pavyzdys:

logistinės regresijos pitono pavyzdinis kodas
{registruotis int pi}

„Registro“ apibrėžimas nereiškia, kad kintamasis bus saugomas registre. Tai gali būti saugoma registre, atsižvelgiant į aparatinę įrangą ir įgyvendinimo apribojimus.

Pažvelkime į registrų ir automatinių saugojimo klasių pavyzdį.

Pavyzdys:

#include naudojant vardų sritį std // kintamojo, kuris turi būti padarytas išoriniu, deklaravimas // vidinę vertę taip pat galima inicijuoti į x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // deklaruojant automatinį kintamąjį (paprasčiausiai // taip pat veikia 'int a = 32' veikimas) int num = 32 // automatinio kintamojo 'a' printf ('kintamojo' num 'reikšmė', deklaruoto kaip automatinis:% dn, num) printf ( '--------------------------------')} negalioja registerStorageClass () {printf ('nDemonstrating register classnn') / / registruojančio registro kintamojo deklaravimas char c = 'G' // registro kintamojo 'b' printf spausdinimas ('kintamojo' c '' reikšmė, deklaruota kaip registras:% dn ', c) printf (' ---- ---------------------------- ')} int main () {// Norėdami parodyti automatinę saugojimo klasę autoStorageClass () // Parodyti register Storage Class registerStorageClass () return 0}

Išvestis:

Išvestis - saugojimo klasė C ++ - „Edureka“Statinio laikymo klasė

Deklaravimui naudojama statinio laikymo klasė statiniai kintamieji . Statiniai kintamieji išsaugo savo vertę (t. Y. Paskutinę vertę), net jei jie nepatenka į jų taikymo sritį. Statiniai kintamieji inicijuojami tik vieną kartąegzistuoja iki programos nutraukimo.

Atmintis statiniam kintamajam skiriama tik vieną kartą, o nauja atmintis neskiriama, nes jos nėra iš naujo deklaruojamos. Visuotinius statinius kintamuosius galima pasiekti bet kurioje programos vietoje. Pagal numatytuosius nustatymus kompiliatorius jiems priskiria vertę 0.

C ++ versijoje, kai klasės duomenų nariui naudojama statinė, visiems jos klasės objektams tai bus bendrinama tik su viena to nario kopija.

Sintaksė:

konvertuoti eilutę į datą java
statinis duomenų tipas var_name1 [= reikšmė]

Pavyzdys:

#include void funkcija (void) static int c = 5 // Visuotinis statinis kintamasis main () {while (c--) {function ()} return 0} negaliojanti funkcija (void) {static int cnt = 2 cnt ++ std :: cout<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

Išvestis:

Išorinė saugojimo klasė

Išorinė saugyklos klasė reikalinga, kai kintamuosius reikia bendrinti keliuose failuose. Išoriniai kintamieji turi visuotinę apimtį ir šie kintamieji yra matomi už failo, kuriame jie deklaruoti, ribų. Išorinis kintamasis yra matomas visoms programoms. Jis naudojamas, jei du ar daugiau failų naudoja tą patį kintamąjį ar funkciją.

Išorinių kintamųjų gyvavimo laikas yra tol, kol nutraukiama programa, kurioje jie deklaruojami. Įprastą visuotinį kintamąjį taip pat galima padaryti išoriniu, uždėjus raktinį žodį „extern“ prieš jo deklaraciją / apibrėžtį bet kurioje funkcijoje / bloke.

Kai naudojate „extern“, kintamojo negalima inicijuoti, nes viskas, ką jis daro, nukreipia kintamojo pavadinimą į anksčiau apibrėžtą saugyklos vietą.

Sintaksė

išorinių duomenų tipas var_name1

Pavyzdys

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

Antrasis failas: support.cpp

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

Čia išorinis raktinis žodis naudojamas deklaruoti cnt kitame faile. Dabar sudarykite šiuos du failus taip ir minusas

$ g ++ main.cpp support.cpp -o rašyti

Tai sukurs vykdomąją įrašymo programą, pabandykite įvykdyti rašymą ir patikrinkite rezultatą taip, kaip minusas

$. / rašyti

5

Žengdami į priekį su saugojimo klase C ++, pažvelkime į paskutinę, t. Y., Kintamą saugojimo klasę.

Kintamųjų laikymo klasė

Kintamasis specifikatorius taikomas tik klasės objektams, o tai leidžia objekto nariui nepaisyti const nario funkcijos. Tai yra, kintamą narį galima modifikuoti naudojant „const“ nario funkciją.

Pagaliau pažvelkime į palyginimo lentelę, kad suprastume skirtingų saugojimo klasių skirtumus.

Sandėliavimo klasė

Raktažodis

Gyvenimas

Matomumas

Pradinė vertė

Automatinis

automatinis

Funkcijų blokas

Vietinis

Šiukšlės

Išorinis

išorinis

Visa programa

Visuotinis

Nulis

Statinis

statinis

Visa programa

Vietinis

Nulis

Registruotis

Registruotis

Funkcijų blokas

Vietinis

Šiukšlės

Kintamas

kintamas

lentelė lentelėje html

Klasė

Vietinis

Šiukšlės

Dabar, praėję minėtas C ++ programas, būtumėte supratę, kas yra skirtingos C ++ saugyklos klasės ir kaip jas įgyvendinti. Tikiuosi, kad šis tinklaraštis yra informatyvus ir suteikia jums pridėtinės vertės.

Taigi mes baigėme šį straipsnį apie „Saugojimo klases C ++“.

Jei norite sužinoti daugiau, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“. „Edureka“ „Java J2EE“ ir SOA mokymo ir sertifikavimo kursai yra skirti mokyti jus tiek pagrindinėms, tiek pažangesnėms „Java“ koncepcijoms kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.

Turite mums klausimą? Prašau tai paminėti šio tinklaraščio komentarų skiltyje ir mes kuo greičiau susisieksime su jumis.