logo

Statiskt nyckelord i C++

Nödvändig förutsättning: Statiska variabler i C

c++ konvertera int till sträng

Det statiska nyckelordet har olika betydelser när det används med olika typer. Vi kan använda statiska nyckelord med:



    Statiska variabler: Variabler i en funktion, Variabler i en klass Statiska medlemmar av klass: Klassobjekt och funktioner i en klass Låt oss nu titta på var och en av dessa användningar av statisk i detalj.

Statiska variabler

Statiska variabler i en funktion : När en variabel deklareras som statisk, utrymme för det tilldelas för programmets livstid . Även om funktionen anropas flera gånger, tilldelas utrymme för den statiska variabeln endast en gång och värdet på variabeln i föregående anrop förs genom nästa funktionsanrop. Detta är användbart för att implementera koroutiner i C/C++ eller någon annan applikation där det tidigare funktionstillståndet måste lagras.

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 programmet ovan att variabelantalet deklareras statiskt. Så dess värde bärs genom funktionsanropen. Variabelantalet initieras inte varje gång funktionen anropas. Som en sidoanteckning tillåter Java inte statiska lokala variabler i funktioner .

Statiska variabler i en klass : Eftersom variablerna som deklareras som statiska initieras endast en gång eftersom de tilldelas utrymme i separat statisk lagring, så kommer de statiska variablerna i en klass delas av objekten. Det kan inte finnas flera kopior av samma statiska variabler för olika objekt. Också på grund av denna anledning kan statiska variabler inte initieras med hjälp av konstruktorer.

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 programmet ovan att vi har försökt skapa flera kopior av den statiska variabeln i för flera objekt. Men detta hände inte. Så en statisk variabel inuti en klass bör initieras explicit av användaren med klassnamnet och scope resolution operator utanför klassen som visas nedan:

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

>

enkelt java-program
>

Produktion

1>

Statiska medlemmar av klassen

Klassobjekt som statiska : Precis som variabler har objekt även när de deklareras som statiska ett omfång till programmets livstid. Betrakta programmet nedan där objektet är icke-statiskt.

C++


c uppsättning strängar



// 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 programmet ovan deklareras objektet inuti if-blocket som icke-statiskt. Så, omfattningen av en variabel är endast inom if-blocket. Så när objektet skapas anropas konstruktorn och så fort kontrollen av if-blocket kommer över anropas förstöraren eftersom omfattningen av objektet endast är inuti if-blocket där det deklareras. Låt oss nu se förändringen i output om vi deklarerar objektet som statiskt.

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 tydligt se förändringen i output. Nu åberopas förstöraren efter slutet av main. Detta hände eftersom omfattningen av statiska objekt är under hela programmets livstid.

Statiska funktioner i en klass : Precis som de statiska datamedlemmarna eller statiska variablerna i klassen, är statiska medlemsfunktioner inte heller beroende av klassens objekt. Vi har tillåtelse att anropa en statisk medlemsfunktion med hjälp av objektet och operatorn '.' men det rekommenderas att anropa de statiska medlemmarna med hjälp av klassnamnet och scope resolution-operatorn. Statiska medlemsfunktioner tillåts endast komma åt statiska datamedlemmar eller andra statiska medlemsfunktioner , kan de inte komma åt de icke-statiska datamedlemmarna eller medlemsfunktionerna i klassen.

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

>

reactjs karta

>

Produktion

Welcome to GfG!>

Relaterade artiklar:

  • Frågesport om statiskt nyckelord
  • Statiska datamedlemmar i C++
  • När förstörs statiska föremål?
  • Intressanta fakta om statiska medlemsfunktioner
  • Kan statiska funktioner vara virtuella?
  • Jämförelse av statiska nyckelord i C++ och Java
  • Statiska funktioner i C