Condiție preliminară: Variabile statice în C
citiți din csv java
Cuvântul cheie static are semnificații diferite atunci când este utilizat cu tipuri diferite. Putem folosi cuvinte cheie statice cu:
- Variabile statice: variabile într-o funcție, variabile într-o clasă Membri statici ai clasei: obiecte de clasă și funcții într-o clasă Să ne uităm acum la fiecare dintre aceste utilizări ale staticii în detaliu.
Variabile statice
Variabile statice într-o funcție : Când o variabilă este declarată ca fiind statică, spațiu pentru este alocat pe durata de viață a programului . Chiar dacă funcția este apelată de mai multe ori, spațiul pentru variabila statică este alocat o singură dată, iar valoarea variabilei din apelul anterior este transportată prin următorul apel de funcție. Acest lucru este util pentru implementarea coroutinelor în C/C++ sau orice altă aplicație în care starea anterioară a funcției trebuie să fie stocată.
C++
// C++ program to demonstrate> // the use of static Static> // variables in a Function> #include> #include> using> namespace> std;> void> demo()> {> >// static variable> >static> int> count = 0;> >cout << count <<>' '>;> >// value is updated and> >// will be carried to next> >// function calls> >count++;> }> int> main()> {> >for> (>int> i = 0; i <5; i++)> >demo();> >return> 0;> }> |
>
>Ieșire
0 1 2 3 4>
Puteți vedea în programul de mai sus că numărul de variabile este declarat static. Deci, valoarea sa este transmisă prin apelurile de funcție. Numărul de variabile nu este inițializat de fiecare dată când funcția este apelată. Ca o notă secundară, Java nu permite variabile locale statice în funcții.
Variabile statice dintr-o clasă : Deoarece variabilele declarate ca statice sunt inițializate o singură dată, deoarece li se alocă spațiu în stocare statică separată, deci variabilele statice într-o clasă sunt împărtășite de obiecte. Nu pot exista mai multe copii ale acelorași variabile statice pentru diferite obiecte. De asemenea, din acest motiv variabilele statice nu pot fi inițializate folosind constructori.
C++
// C++ program to demonstrate static> // variables inside a class> #include> using> namespace> std;> class> GfG {> public>:> >static> int> i;> >GfG(){> >// Do nothing> >};> };> int> main()> {> >GfG obj1;> >GfG obj2;> >obj1.i = 2;> >obj2.i = 3;> >// prints value of i> >cout << obj1.i <<>' '> << obj2.i;> }> |
>
>
Ieșire
undefined reference to `GfG::i' collect2: error: ld returned 1 exit status>
Puteți vedea în programul de mai sus că am încercat să creăm mai multe copii ale variabilei statice i pentru mai multe obiecte. Dar acest lucru nu s-a întâmplat. Deci, o variabilă statică din interiorul unei clase ar trebui să fie inițializată explicit de către utilizator folosind numele clasei și operatorul de rezoluție a domeniului în afara clasei, așa cum se arată mai jos:
C++
// C++ program to demonstrate static> // variables inside a class> #include> using> namespace> std;> class> GfG {> public>:> >static> int> i;> >GfG(){> >// Do nothing> >};> };> int> GfG::i = 1;> int> main()> {> >GfG obj;> >// prints value of i> >cout << obj.i;> }> |
mb la gb
>
>Ieșire
1>
Membri statici ai clasei
Clasați obiectele ca statice : La fel ca variabilele, obiectele și atunci când sunt declarate ca statice au un domeniu de aplicare până la durata de viață a programului. Luați în considerare programul de mai jos în care obiectul nu este static.
C++
încapsulare în java
// CPP program to illustrate> // when not using static keyword> #include> using> namespace> std;> class> GfG {> >int> i;> public>:> >GfG()> >{> >i = 0;> >cout <<>'Inside Constructor
'>;> >}> >~GfG() { cout <<>'Inside Destructor
'>; }> };> int> main()> {> >int> x = 0;> >if> (x == 0) {> >GfG obj;> >}> >cout <<>'End of main
'>;> }> |
>
>Ieșire
Inside Constructor Inside Destructor End of main>
În programul de mai sus, obiectul este declarat în interiorul blocului if ca nestatic. Deci, domeniul de aplicare al unei variabile este numai în interiorul blocului if. Deci, atunci când obiectul este creat, constructorul este invocat și imediat ce controlul blocului if trece peste destructor este invocat, deoarece domeniul de aplicare al obiectului este în interiorul blocului if doar acolo unde este declarat. Să vedem acum schimbarea în ieșire dacă declarăm obiectul ca static.
C++
// CPP program to illustrate> // class objects as static> #include> using> namespace> std;> class> GfG {> >int> i = 0;> public>:> >GfG()> >{> >i = 0;> >cout <<>'Inside Constructor
'>;> >}> >~GfG() { cout <<>'Inside Destructor
'>; }> };> int> main()> {> >int> x = 0;> >if> (x == 0) {> >static> GfG obj;> >}> >cout <<>'End of main
'>;> }> |
>
>Ieșire
Inside Constructor End of main Inside Destructor>
Puteți vedea clar schimbarea în ieșire. Acum destructorul este invocat după sfârșitul principalului. Acest lucru sa întâmplat deoarece domeniul de aplicare al obiectelor statice este pe toată durata de viață a programului.
Funcții statice într-o clasă : La fel ca membrii de date statice sau variabilele statice din interiorul clasei, funcțiile de membru statice, de asemenea, nu depind de obiectul clasei. Avem voie să invocăm o funcție de membru static folosind obiectul și operatorul „.”, dar este recomandat să invocăm membrii statici folosind numele clasei și operatorul de rezoluție a domeniului. Funcțiile membre statice au voie să acceseze numai membrii de date statice sau alte funcții membre statice , ei nu pot accesa membrii de date nestatici sau funcțiile membre ale clasei.
C++
// C++ program to demonstrate static> // member function in a class> #include> using> namespace> std;> class> GfG {> public>:> >// static member function> >static> void> printMsg() { cout <<>'Welcome to GfG!'>; }> };> // main function> int> main()> {> >// invoking a static member function> >GfG::printMsg();> }> |
mylivecricket.
>
>Ieșire
Welcome to GfG!>
Articole similare:
- Test pe cuvânt cheie static
- Membrii de date statice în C++
- Când sunt distruse obiectele statice?
- Fapte interesante despre funcțiile membre statice
- Funcțiile statice pot fi virtuale?
- Comparație de cuvinte cheie static în C++ și Java
- Funcții statice în C