C++/Składniki statyczne: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
m Reverted 1 edit by 88.199.148.2 (talk) identified as vandalism to last revision by 83.6.27.245. (TW)
Linia 4:
Czasami zachodzi potrzeba dodania elementu, który jest zwiazany z ''klasą'', ale nie z konkretną ''instancją'' tej klasy. Możemy wtedy stworzyć element '''statyczny'''. Element '''statyczny''' jest właśnie elementem, który jest powiązany z ''klasą'', a nie z ''obiektem'' tej klasy, czyli np. statyczna metoda nie może się odwołać do niestatycznej zmiennej lub funkcji.
 
== Składnia ==
PEDAŁY I ZDZIRY ;ddd
Elementy '''statyczne''' poprzedza się podczas definicji słówkiem ''static''. '''Statyczne''' mogą być zarówno ''funkcje'', jak i ''pola'' należące do klasy.
<source lang="cpp">
class Klasa
{
protected:
static int liczbaInstancji; // pole statyczne
public:
Klasa()
{
liczbaInstancji++;
}
virtual ~Klasa()
{
liczbaInstancji--;
}
static int LiczbaInstancji()
{
return liczbaInstancji;
}
};
int Klasa::liczbaInstancji=0;
</source>
 
Jak widać do obiektów statycznych z wewnątrz klasy możemy się odwołać tak samo jak do innych pól. Pole ''liczbaInstancji'' w powyższym przykładzie nie jest jednak zwykłym polem - jest polem '''statycznym'''. Oznacza to, że powstanie tylko jedna instancja tego pola. W powyższym przykładzie ''liczbaInstancji'' ma za zadanie zliczania ile powstało obiektów klasy ''Klasa''.
 
W powyższym przykładzie ponadto istnieje '''metoda statyczna'''. Z takiej metody nie można się odwołać do niestatycznych elementów klasy. Zarówno do '''klasy statycznej''' jak do '''statycznego pola''' możemy się odwołać nawet jeżeli nie został stworzony żaden obiekt klasy ''Klasa''.
 
Odwołanie się do '''metody statycznej''' ''LiczbaInstancji'' z programu wymaga następująco:
int i=Klasa::LiczbaInstancji();
Gdyby zaś pole ''liczbaInstancji'' było publiczne, a nie chronione, to moglibyśmy się do niego odwołać poprzez:
int i=Klasa::liczbaInstancji;
Ponieważ jednak w powyższym przykładzie pole ''liczbaInstancji'' jest chronione możemy się do niego odwołać jedynie z klasy ''Klasa'' bądź z klas które po niej dziedziczą.
 
Oczywiscie metody statyczne nie mogą być wirtualne.
 
<noinclude>{{Nawigacja|C++|
[[../Dziedziczenie|Dziedziczenie]]|
[[../Funkcje wirtualne|Funkcje wirtualne]]|
}}</noinclude>