Reklama
Dzisiaj jest 10 stycznia 2025 r.
Chcę dodać własny artykuł
Reklama
Reklama
Reklama

Zmienna statyczna

Zmienna statyczna

Zmienna statyczna w programowaniu to zmienna, która ma jedną instancję w danym bloku programu i istnieje przez cały czas jego działania. W języku C++ każda zmienna globalna jest zmienną statyczną.

Reklama

Zmienna statyczna w bloku funkcji

Zmienna statyczna zadeklarowana w funkcji pamięta swoją wartość pomiędzy wywołaniami funkcji, co odróżnia ją od zmiennych lokalnych. Przykład w C++:


#include
int podajStatyczna() {
static int x = 0; // deklaracja i inicjalizacja zmiennej statycznej
return ++x; // zwiększamy „x” i zwracamy
}
int podajZwykla() {
int x = 0; // deklaracja zmiennej lokalnej
return ++x; // zwiększamy „x” i zwracamy
}
int main() {
std::cout << podajStatyczna() << std::endl; // wyświetli 1 std::cout << podajStatyczna() << std::endl; // wyświetli 2 std::cout << podajZwykla() << std::endl; // wyświetli 1 std::cout << podajZwykla() << std::endl; // wyświetli 1 }

Reklama

W przykładzie zmienna statyczna `x` jest tworzona i inicjowana tylko raz, co pozwala na zachowanie wartości pomiędzy wywołaniami funkcji. Zmienna zadeklarowana w metodzie klasy działa analogicznie.

Zmienna statyczna w bloku klasy

Zmienna statyczna w klasie jest wspólna dla wszystkich obiektów tej klasy i jest tworzona na początku działania programu. Przykład:


#include
using namespace std;
class MojaKlasa {
public:
static int x;
MojaKlasa() { x++; } // zwiększa „x”
~MojaKlasa() { x–; } // zmniejsza „x”
};
int MojaKlasa::x = 0; // definicja zmiennej statycznej
int main() {
MojaKlasa obiekt1;
cout << obiekt1.x << endl; // wyświetli 1 MojaKlasa obiekt2; cout << obiekt2.x << endl; // wyświetli 2 cout << MojaKlasa::x << endl; // wyświetli 2 return 0; }

W tym przykładzie zmienna statyczna `x` działa jako licznik obiektów klasy `MojaKlasa`. Można do niej odwoływać się zarówno przez obiekt, jak i przez nazwę klasy, co jest charakterystyczne dla zmiennych statycznych, które istnieją niezależnie od instancji obiektów.

Właściwości i wykorzystanie

  • Zmiennie statyczne mogą zastąpić zmienne globalne, umieszczając je w klasach.
  • Tworzenie klas-kontenerów, które uniemożliwiają tworzenie instancji, jest powszechną praktyką.

Przykład klas-kontenerów:


class StaleMatematyczne {
public:
static const double pi;
static const double e;
private:
StaleMatematyczne() {} // konstruktor prywatny
StaleMatematyczne(const StaleMatematyczne& wzorzec) {} // konstruktor kopiujący
StaleMatematyczne& operator=(const StaleMatematyczne& wzorzec) {
return *this; // operator przypisania
}
};
const double StaleMatematyczne::pi = 3.14159;
const double StaleMatematyczne::e = 2.71828;

Reklama
Reklama