logo

Statisk nøkkelord i C++

Forutsetning: Statiske variabler i C

prøv datastruktur

Det statiske nøkkelordet har forskjellig betydning når det brukes med forskjellige typer. Vi kan bruke statiske søkeord med:



    Statiske variabler: Variabler i en funksjon, Variabler i en klasse Statiske medlemmer av klassen: Klasseobjekter og funksjoner i en klasse La oss nå se på hver av disse bruken av statisk i detalj.

Statiske variabler

Statiske variabler i en funksjon : Når en variabel er deklarert som statisk, plass til det blir tildelt for programmets levetid . Selv om funksjonen kalles flere ganger, tildeles plass for den statiske variabelen bare én gang, og verdien til variabelen i forrige kall blir ført gjennom neste funksjonskall. Dette er nyttig for å implementere koroutiner i C/C++ eller en hvilken som helst annen applikasjon der den forrige funksjonstilstanden må lagres.

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

>

>

Produksjon

0 1 2 3 4>

Du kan se i programmet ovenfor at variabeltellingen er erklært statisk. Så verdien bæres gjennom funksjonskallene. Variabeltellingen blir ikke initialisert hver gang funksjonen kalles. Som en sidenotat tillater ikke Java statiske lokale variabler i funksjoner.

Statiske variabler i en klasse : Siden variablene som er erklært som statiske initialiseres bare én gang ettersom de tildeles plass i separat statisk lagring, vil de statiske variablene i en klasse deles av objektene. Det kan ikke være flere kopier av de samme statiske variablene for forskjellige objekter. Også på grunn av denne grunn kan ikke statiske variabler initialiseres ved hjelp av 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;> }>

>

>

Produksjon

undefined reference to `GfG::i' collect2: error: ld returned 1 exit status>

Du kan se i programmet ovenfor at vi har prøvd å lage flere kopier av den statiske variabelen i for flere objekter. Men dette skjedde ikke. Så en statisk variabel inne i en klasse bør initialiseres eksplisitt av brukeren ved å bruke klassenavnet og omfangsoppløsningsoperatøren utenfor klassen som vist nedenfor:

C++




fonter for 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;> }>

>

>

Produksjon

1>

Statiske medlemmer av klassen

Klasse objekter som statiske : Akkurat som variabler, har objekter også når de erklæres som statiske, et omfang til programmets levetid. Tenk på programmet nedenfor der 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 '>;> }>

>

>

Produksjon

Inside Constructor Inside Destructor End of main>

I programmet ovenfor er objektet erklært inne i if-blokken som ikke-statisk. Så omfanget av en variabel er bare innenfor if-blokken. Så når objektet er opprettet påkalles konstruktøren og så snart kontrollen av if-blokken kommer over, påkalles destruktoren ettersom omfanget av objektet er inne i if-blokken bare der det er deklarert. La oss nå se endringen i utdata 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 '>;> }>

>

>

Produksjon

Inside Constructor End of main Inside Destructor>

Du kan tydelig se endringen i produksjonen. Nå påkalles destruktoren etter slutten av hovedinnholdet. Dette skjedde fordi omfanget av statiske objekter er gjennom hele programmets levetid.

Statiske funksjoner i en klasse : Akkurat som de statiske datamedlemmene eller statiske variablene inne i klassen, avhenger heller ikke statiske medlemsfunksjoner av objektet til klassen. Vi har lov til å påkalle en statisk medlemsfunksjon ved å bruke objektet og '.'-operatoren, men det anbefales å påkalle de statiske medlemmene ved å bruke klassenavnet og scope-oppløsningsoperatoren. Statiske medlemsfunksjoner har kun tilgang til statiske datamedlemmer eller andre statiske medlemsfunksjoner , kan de ikke få tilgang til de ikke-statiske datamedlemmene eller medlemsfunksjonene til 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();> }>

>

>

Produksjon

Welcome to GfG!>

Relaterte artikler:

  • Quiz om statisk nøkkelord
  • Statiske datamedlemmer i C++
  • Når blir statiske gjenstander ødelagt?
  • Interessante fakta om statiske medlemsfunksjoner
  • Kan statiske funksjoner være virtuelle?
  • Sammenligning av statiske nøkkelord i C++ og Java
  • Statiske funksjoner i C