logo

Statinis raktinis žodis C++

Būtina sąlyga: Statiniai kintamieji C

java turi kitą

Statinis raktinis žodis turi skirtingas reikšmes, kai naudojamas su skirtingais tipais. Statinius raktinius žodžius galime naudoti su:



    Statiniai kintamieji: funkcijos kintamieji, klasės kintamieji Statiniai klasės nariai: klasės objektai ir funkcijos klasėje Pažiūrėkime į kiekvieną iš šių statikos naudojimo būdų.

Statiniai kintamieji

Statiniai kintamieji funkcijoje : kai kintamasis deklaruojamas kaip statinis, paliekama vieta jis skiriamas visam programos galiojimo laikui . Net jei funkcija iškviečiama kelis kartus, vieta statiniam kintamajam skiriama tik vieną kartą, o kintamojo reikšmė ankstesniame iškvietime perkeliama per kitą funkcijos iškvietimą. Tai naudinga diegiant korutinas C/C++ arba bet kurioje kitoje programoje, kurioje reikia išsaugoti ankstesnę funkcijos būseną.

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

>

>

Išvestis

0 1 2 3 4>

Aukščiau pateiktoje programoje matote, kad kintamųjų skaičius yra paskelbtas statiniu. Taigi, jo reikšmė perduodama per funkcijų iškvietimus. Kintamųjų skaičius nėra inicijuojamas kiekvieną kartą, kai iškviečiama funkcija. Pastaba: „Java“ neleidžia naudoti statinių vietinių kintamųjų funkcijose.

Statiniai kintamieji klasėje : Kadangi kintamieji, paskelbti kaip statiniai, inicijuojami tik vieną kartą, nes jiems skiriama vieta atskiroje statinėje saugykloje, todėl statiniai kintamieji klasėje dalijasi objektai. Negali būti kelių skirtingų objektų tų pačių statinių kintamųjų kopijų. Taip pat dėl ​​šios priežasties statiniai kintamieji negali būti inicijuojami naudojant konstruktorius.

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

>

>

Išvestis

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

Aukščiau pateiktoje programoje matote, kad bandėme sukurti kelias statinio kintamojo i kopijas keliems objektams. Bet tai neįvyko. Taigi, statinį kintamąjį klasėje turėtų inicijuoti vartotojas, naudodamas klasės pavadinimą ir apimties skyros operatorių už klasės ribų, kaip parodyta toliau:

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

>

>

Išvestis

1>

Statiški klasės nariai

Klasifikuokite objektus kaip statinius : Kaip ir kintamieji, objektai, paskelbti kaip statiniai, galioja iki programos gyvavimo pabaigos. Apsvarstykite toliau pateiktą programą, kurioje objektas yra nestatinis.

C++


python os listdir



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

>

>

Išvestis

Inside Constructor Inside Destructor End of main>

Aukščiau pateiktoje programoje objektas if bloko viduje deklaruojamas kaip nestatinis. Taigi, kintamojo apimtis yra tik jei bloko viduje. Taigi, kai objektas sukuriamas, iškviečiamas konstruktorius ir iš karto, kai bloko if valdymas peržengia destruktorių, nes objekto apimtis yra if bloko viduje tik ten, kur jis deklaruojamas. Dabar pamatysime išvesties pokytį, jei deklaruosime objektą kaip statinį.

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

>

>

Išvestis

kino aktorė Kajal
Inside Constructor End of main Inside Destructor>

Galite aiškiai matyti išvesties pokyčius. Dabar naikintojas iškviečiamas pasibaigus pagrindiniam. Taip atsitiko todėl, kad statinių objektų apimtis yra per visą programos veikimo laiką.

Statinės funkcijos klasėje : Kaip ir statiniai duomenų nariai ar statiniai kintamieji klasėje, statinių narių funkcijos taip pat nepriklauso nuo klasės objekto. Mums leidžiama iškviesti statinio nario funkciją naudojant objektą ir operatorių „.“, tačiau rekomenduojama iškviesti statinius narius naudojant klasės pavadinimą ir apimties skyros operatorių. Statinių narių funkcijoms leidžiama prieiti tik prie statinių duomenų narių arba kitų statinių narių funkcijų , jie negali pasiekti nestatinių duomenų narių ar klasės narių funkcijų.

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

>

>

Išvestis

Welcome to GfG!>

Susiję straipsniai:

  • Statinio raktinio žodžio viktorina
  • Statinių duomenų nariai C++
  • Kada sunaikinami statiniai objektai?
  • Įdomūs faktai apie statines narių funkcijas
  • Ar statinės funkcijos gali būti virtualios?
  • Statinio raktinio žodžio palyginimas C++ ir Java
  • Statinės funkcijos C