From MJanik
Zadanie przykładowe:
Wprowadzenie: pola statyczne i metody statyczne
W języku C++ oprócz zwykłych pól i metod obiektowych możemy w klasie zdefiniować pola statyczne oraz metody statyczne. Są to elementy, które nie należą do konkretnego obiektu, lecz do samej klasy. Oznacza to, że:
- wszystkie obiekty danej klasy współdzielą jedną kopię pola statycznego,
- pole statyczne istnieje, nawet jeśli nie utworzono jeszcze żadnego obiektu,
- metodę statyczną można wywołać bez tworzenia obiektu, używając nazwy klasy.
Najczęstsze zastosowania pól statycznych to:
- zliczanie liczby utworzonych obiektów,
- przechowywanie ustawień wspólnych dla całej klasy,
- przechowywanie wartości globalnych logicznie powiązanych z daną klasą.
Metody statyczne natomiast:
- pozwalają wykonywać operacje związane z klasą jako całością (np. wypisywać stan pól statycznych),
- nie mają dostępu do pól obiektów (bo nie działają na obiekcie),
- mogą być wywoływane bez instancji.
W poniższym zadaniu te pojęcia zostaną wykorzystane do stworzenia klasy z polem statycznym, liczącym liczbę figur.
Pole statyczne
Proszę napisać klasę figura posiadającą (oddzielne pliki .cpp i .h!):
- n - liczbę boków
- d - długość boku
- color - kolor (string)
- count - ilość figur - *static*!
metody:
- konstruktor. Domyślnym kolorem jest czerwony, a domyślna liczba boków to 3. Stworzenie nowej figury powinno zwiększać pole count o 1.
- ZmienKolor(string new_color);
- ZmienLiczbeBokow(int new_b);
oraz metodę statyczną wypisującą ilość figur (count) - [static void wypisz_count()]
Zadania w funkcji main
1. Na początku programu:
Wywołać metodę statyczną wypisz_count() bez tworzenia żadnego obiektu.
2. Utworzyć trzy obiekty klasy figura:
figura f1(4, "zielona");
figura f2(8, "niebieska");
figura f3;
Następnie ponownie wywołać wypisz_count().
3. Stworzyć tablicę figur:
figura * fig_tab;
dla 5 nowych figur (stworzyć tablicę dynamicznie używając new).
Następnie wywołać wypisz_count(), aby wypisać aktualną liczbę figur.
Jak działa pole statyczne? Jaką zaletę ma funkcja statyczna?