logo

Statyczne słowo kluczowe w C++

Warunek wstępny: Zmienne statyczne w C

nazewnictwo w konwencji Java

Słowo kluczowe static ma różne znaczenia, gdy jest używane z różnymi typami. Możemy używać statycznych słów kluczowych z:



    Zmienne statyczne: zmienne w funkcji, zmienne w klasie Statyczne elementy klasy: obiekty klas i funkcje w klasie Przyjrzyjmy się teraz szczegółowo każdemu z tych zastosowań statyki.

Zmienne statyczne

Zmienne statyczne w funkcji : Gdy zmienna jest zadeklarowana jako statyczna, należy umieścić spację dla jest on przydzielany na cały okres istnienia programu . Nawet jeśli funkcja jest wywoływana wielokrotnie, miejsce na zmienną statyczną jest przydzielane tylko raz, a wartość zmiennej z poprzedniego wywołania jest przenoszona przez następne wywołanie funkcji. Jest to przydatne do implementowania współprogramów w C/C++ lub dowolnej innej aplikacji, w której musi być przechowywany poprzedni stan funkcji.

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

>

>

Wyjście

0 1 2 3 4>

W powyższym programie widać, że liczba zmiennych jest zadeklarowana jako statyczna. Zatem jego wartość jest przenoszona poprzez wywołania funkcji. Liczba zmiennych nie jest inicjowana przy każdym wywołaniu funkcji. Na marginesie, Java nie pozwala na statyczne zmienne lokalne w funkcjach.

Zmienne statyczne w klasie : Ponieważ zmienne zadeklarowane jako statyczne są inicjowane tylko raz, ponieważ przydzielono im miejsce w oddzielnej pamięci statycznej, zmienne statyczne w klasie są wspólne dla obiektów. Nie może istnieć wiele kopii tych samych zmiennych statycznych dla różnych obiektów. Również z tego powodu zmiennych statycznych nie można inicjować za pomocą konstruktorów.

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

>

>

Wyjście

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

W powyższym programie widać, że próbowaliśmy utworzyć wiele kopii zmiennej statycznej i dla wielu obiektów. Ale tak się nie stało. Zatem zmienna statyczna wewnątrz klasy powinna zostać jawnie zainicjowana przez użytkownika przy użyciu nazwy klasy i operatora rozpoznawania zakresu poza klasą, jak pokazano poniżej:

C++


główna metoda Java



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

>

>

Wyjście

1>

Statyczne elementy klasy

Obiekty klas jako statyczne : Podobnie jak zmienne, obiekty również zadeklarowane jako statyczne mają zakres do końca życia programu. Rozważ poniższy program, w którym obiekt jest niestatyczny.

C++


Iterator Java dla mapy



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

>

>

Wyjście

Inside Constructor Inside Destructor End of main>

W powyższym programie obiekt jest zadeklarowany wewnątrz bloku if jako niestatyczny. Zatem zakres zmiennej znajduje się tylko w bloku if. Zatem po utworzeniu obiektu wywoływany jest konstruktor i gdy tylko kontrola bloku if przejmie kontrolę, wywoływany jest destruktor, ponieważ zakres obiektu znajduje się wewnątrz bloku if tylko tam, gdzie jest zadeklarowany. Zobaczmy teraz zmianę wyniku, jeśli zadeklarujemy obiekt jako statyczny.

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

>

>

Wyjście

Inside Constructor End of main Inside Destructor>

Wyraźnie widać zmianę wydajności. Teraz destruktor jest wywoływany po zakończeniu main. Stało się tak, ponieważ zakres obiektów statycznych obejmuje cały okres istnienia programu.

Funkcje statyczne w klasie : Podobnie jak statyczne elementy danych lub zmienne statyczne wewnątrz klasy, statyczne funkcje składowe również nie zależą od obiektu klasy. Możemy wywołać statyczną funkcję członkowską przy użyciu obiektu i operatora „.”, ale zaleca się wywoływanie statycznych składowych przy użyciu nazwy klasy i operatora rozpoznawania zakresu. Statyczne funkcje członkowskie mogą uzyskiwać dostęp tylko do statycznych elementów danych lub innych statycznych funkcji składowych , nie mogą uzyskać dostępu do niestatycznych elementów danych ani funkcji składowych klasy.

C++


pętla for w 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();> }>

>

>

Wyjście

Welcome to GfG!>

Powiązane artykuły:

  • Quiz na temat statycznego słowa kluczowego
  • Statyczne elementy danych w C++
  • Kiedy niszczone są obiekty statyczne?
  • Interesujące fakty na temat statycznych funkcji składowych
  • Czy funkcje statyczne mogą być wirtualne?
  • Porównanie słowa kluczowego static w C++ i Javie
  • Funkcje statyczne w C