From MJanik
(Difference between revisions)
|
|
| Line 1: |
Line 1: |
| - |
| |
| | Zadanie przykładowe: | | 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 == | | == Pole statyczne == |
| Line 26: |
Line 46: |
| | | | |
| | | | |
| - | W klasie main:
| + | === Zadania w funkcji main === |
| | | | |
| - | Najpierw użyć funkcji wypisz_count (bez deklaracji obiektu klasy!).
| + | '''1. Na początku programu:''' |
| | | | |
| - | Następnie proszę stworzyć w klasie main 3 figury:
| + | Wywołać metodę statyczną wypisz_count() bez tworzenia żadnego obiektu. |
| | | | |
| - | figura f1(4, "zielona");
| + | '''2. Utworzyć trzy obiekty klasy figura:''' |
| - | figura f2(8, "niebieska);
| + | |
| - | figura f3;
| + | |
| | | | |
| - | Następnie wypisać wartość pola count dla klasy figura. (wypisz_count)
| + | figura f1(4, "zielona"); |
| | | | |
| | + | figura f2(8, "niebieska"); |
| | | | |
| - | Następnie stworzyć klasę Tablica_Figur, zawierającą pole:
| + | figura f3; |
| | | | |
| - | figura * fig_tab;
| + | Następnie ponownie wywołać wypisz_count(). |
| | | | |
| - | z konstruktorem przyjmującym maksymalną liczbę figur (N)
| + | '''3. Stworzyć klasę Tablica_Figur zawierającą pole:''' |
| | | | |
| - | Tablica_Figur(int)
| + | figura * fig_tab; |
| | | | |
| - | oraz odpowiednim destruktorem.
| + | z konstruktorem: |
| | | | |
| | + | Tablica_Figur(int N) |
| | | | |
| - | Konstruktor powinien tworzyć tablicę N czerwonych trójkątów i przypisywać wskaźnik fig_tab pod tak stworzoną tablicę (operator new!)
| + | oraz destruktorem. |
| | | | |
| - | Destruktor powinien odpowiednio zwalniać pamięć.
| + | Konstruktor powinien tworzyć tablicę N czerwonych trójkątów (operator new) |
| | + | i przypisywać jej adres do fig_tab. |
| | | | |
| | + | Destruktor powinien poprawnie zwalniać zaalokowaną pamięć. |
| | | | |
| - | Należy następnie zadeklarować tablicę_figur dla 5 nowych figur.
| + | '''4. W main:''' |
| | | | |
| - | Należy wypisać wartość pola count dla klasy figura. (wypisz_count)
| + | Zadeklarować obiekt klasy Tablica_Figur dla 5 nowych figur. |
| | | | |
| | + | Następnie wywołać wypisz_count(), aby wypisać aktualną liczbę figur. |
| | | | |
| - | Jak działa pole statyczne? Jaką zaletę ma funkcja statyczna? | + | '''Jak działa pole statyczne? Jaką zaletę ma funkcja statyczna?''' |
Revision as of 13:02, 7 November 2025
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ć klasę Tablica_Figur zawierającą pole:
figura * fig_tab;
z konstruktorem:
Tablica_Figur(int N)
oraz destruktorem.
Konstruktor powinien tworzyć tablicę N czerwonych trójkątów (operator new)
i przypisywać jej adres do fig_tab.
Destruktor powinien poprawnie zwalniać zaalokowaną pamięć.
4. W main:
Zadeklarować obiekt klasy Tablica_Figur dla 5 nowych figur.
Następnie wywołać wypisz_count(), aby wypisać aktualną liczbę figur.
Jak działa pole statyczne? Jaką zaletę ma funkcja statyczna?