logo

Статичне ключове слово в C++

Необхідна умова: Статичні змінні в C

java int як рядок

Ключове слово static має різні значення при використанні з різними типами. Ми можемо використовувати статичні ключові слова з:

    Статичні змінні: змінні у функції, змінні в класі Статичні члени класу: об’єкти класу та функції в класі Давайте тепер детально розглянемо кожне з цих використання static.

Статичні змінні

Статичні змінні у функції : коли змінну оголошено як статичну, пробіл для воно виділяється на весь час існування програми . Навіть якщо функція викликається кілька разів, місце для статичної змінної виділяється лише один раз, і значення змінної в попередньому виклику переноситься через наступний виклик функції. Це корисно для реалізації співпрограм у C/C++ або будь-якій іншій програмі, де потрібно зберегти попередній стан функції.



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

>

>

Вихід

0 1 2 3 4>

Ви можете побачити у наведеній вище програмі, що змінна count оголошена статичною. Отже, його значення передається через виклики функцій. Змінна count не ініціалізується під час кожного виклику функції. До речі, Java не дозволяє використовувати статичні локальні змінні у функціях.

Статичні змінні в класі : оскільки змінні, оголошені як статичні, ініціалізуються лише один раз, оскільки їм виділяється місце в окремому статичному сховищі, тому статичні змінні у класі спільно використовуються об’єктами. Не може бути кількох копій тих самих статичних змінних для різних об’єктів. Також через цю причину статичні змінні не можна ініціалізувати за допомогою конструкторів.

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

>

зірчаста топологія

>

Вихід

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

Ви можете побачити у наведеній вище програмі, що ми намагалися створити кілька копій статичної змінної i для кількох об’єктів. Але цього не сталося. Таким чином, статична змінна всередині класу повинна бути ініціалізована користувачем явно за допомогою імені класу та оператора дозволу області за межами класу, як показано нижче:

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

>

>

Вихід

1>

Статичні члени класу

Об'єкти класу як статичні : Так само, як і змінні, об’єкти, оголошені як статичні, мають область видимості до кінця життя програми. Розглянемо наведену нижче програму, де об’єкт є нестатичним.

C++


актор Чиранджіві



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

>

>

Вихід

Inside Constructor Inside Destructor End of main>

У наведеній вище програмі об’єкт оголошено всередині блоку if як нестатичний. Таким чином, область дії змінної знаходиться лише всередині блоку if. Отже, коли об’єкт створюється, конструктор викликається, і щойно контроль над блоком if переходить над деструктором, викликається, оскільки область видимості об’єкта знаходиться всередині блоку if лише там, де він оголошений. Давайте тепер подивимося зміни у виводі, якщо ми оголосимо об’єкт як статичний.

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

>

myflixr

>

Вихід

Inside Constructor End of main Inside Destructor>

Ви можете чітко побачити зміну виходу. Тепер деструктор викликається після закінчення основного. Це сталося через те, що статичні об’єкти діють протягом усього життя програми.

Статичні функції в класі : Так само, як статичні члени даних або статичні змінні всередині класу, статичні функції-члени також не залежать від об’єкта класу. Нам дозволено викликати статичну функцію-член за допомогою об’єкта та оператора «.», але рекомендується викликати статичні члени за допомогою імені класу та оператора дозволу області видимості. Статичним функціям-членам дозволено доступ лише до статичних членів даних або інших статичних функцій-членів , вони не можуть отримати доступ до нестатичних членів даних або функцій-членів класу.

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

>

>

Вихід

Welcome to GfG!>

Пов'язані статті:

  • Тест на статичні ключові слова
  • Статичні члени даних у C++
  • Коли руйнуються статичні об'єкти?
  • Цікаві факти про статичні функції-члени
  • Чи можуть статичні функції бути віртуальними?
  • Порівняння ключового слова static у C++ і Java
  • Статичні функції в C