Forudsætning: Statiske variable i C
liste sorteret java
Det statiske søgeord har forskellige betydninger, når det bruges med forskellige typer. Vi kan bruge statiske søgeord med:
- Statiske variable: Variabler i en funktion, Variabler i en klasse Statiske medlemmer af klassen: Klasseobjekter og funktioner i en klasse Lad os nu se på hver enkelt af disse anvendelser af statisk i detaljer.
Statiske variable
Statiske variable i en funktion : Når en variabel er erklæret som statisk, plads til det bliver tildelt for programmets levetid . Selvom funktionen kaldes flere gange, tildeles plads til den statiske variabel kun én gang, og værdien af variablen i det forrige kald føres gennem det næste funktionskald. Dette er nyttigt til at implementere coroutines i C/C++ eller enhver anden applikation, hvor den tidligere funktionstilstand skal gemmes.
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;> }> |
>
>Produktion
0 1 2 3 4>
Du kan se i ovenstående program, at variabelantal er erklæret statisk. Så dens værdi føres gennem funktionskaldene. Variabletælleren bliver ikke initialiseret hver gang funktionen kaldes. Som en sidebemærkning tillader Java ikke statiske lokale variabler i funktioner.
Statiske variable i en klasse : Da de variable, der er erklæret som statiske, kun initialiseres én gang, da de tildeles plads i separat statisk lager, så vil de statiske variabler i en klasse deles af objekterne. Der kan ikke være flere kopier af de samme statiske variable for forskellige objekter. Også på grund af denne grund kan statiske variabler ikke initialiseres ved hjælp af konstruktører.
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;> }> |
>
>
Produktion
undefined reference to `GfG::i' collect2: error: ld returned 1 exit status>
Du kan se i ovenstående program, at vi har forsøgt at lave flere kopier af den statiske variabel i for flere objekter. Men dette skete ikke. Så en statisk variabel inde i en klasse bør initialiseres eksplicit af brugeren ved at bruge klassenavnet og scope resolution operatoren uden for klassen som vist nedenfor:
C++
skrifttyper til gimp
// 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;> }> |
>
>Produktion
1>
Statiske medlemmer af klassen
Klasser objekter som statiske : Ligesom variabler har objekter også, når de erklæres som statiske, et omfang indtil programmets levetid. Overvej nedenstående program, hvor objektet er ikke-statisk.
C++
erstatte streng i 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
'>;> }> |
>
>Produktion
Inside Constructor Inside Destructor End of main>
I ovenstående program erklæres objektet inde i if-blokken som ikke-statisk. Så omfanget af en variabel er kun inden for if-blokken. Så når objektet er oprettet, påkaldes konstruktøren, og så snart kontrollen af if-blokken kommer over, påkaldes destructoren, da objektets omfang kun er inde i if-blokken, hvor det er erklæret. Lad os nu se ændringen i output, hvis vi erklærer objektet som statisk.
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
'>;> }> |
>
>Produktion
Inside Constructor End of main Inside Destructor>
Du kan tydeligt se ændringen i output. Nu påkaldes destruktoren efter afslutningen af main. Dette skete, fordi omfanget af statiske objekter er i hele programmets levetid.
Statiske funktioner i en klasse : Ligesom de statiske datamedlemmer eller statiske variable inde i klassen, afhænger statiske medlemsfunktioner heller ikke af klassens objekt. Vi har lov til at påkalde en statisk medlemsfunktion ved hjælp af objektet og '.'-operatoren, men det anbefales at påkalde de statiske medlemmer ved hjælp af klassenavnet og scope-opløsningsoperatoren. Statiske medlemsfunktioner har kun adgang til de statiske datamedlemmer eller andre statiske medlemsfunktioner , kan de ikke få adgang til de ikke-statiske datamedlemmer eller medlemsfunktioner i klassen.
C++
java arv
// 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();> }> |
>
>Produktion
Welcome to GfG!>
Relaterede artikler:
- Quiz om statisk søgeord
- Statiske datamedlemmer i C++
- Hvornår ødelægges statiske genstande?
- Interessante fakta om statiske medlemsfunktioner
- Kan statiske funktioner være virtuelle?
- Sammenligning af statiske nøgleord i C++ og Java
- Statiske funktioner i C