Języki Programowania 7From MJanik(Difference between revisions)
Revision as of 09:46, 12 November 2025Zadanie przykładowe: Laboratorium 7 - Baza studentów, pola statyczne, konstruktor kopiujący, dynamiczna alokacja pamięci.
Wprowadzenie: pola statyczne i metody statyczneW 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:
Najczęstsze zastosowania pól statycznych to:
Metody statyczne natomiast:
W poniższym zadaniu te pojęcia zostaną wykorzystane do stworzenia klasy z polem statycznym, liczącym liczbę figur. Pole statyczneProszę 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*!
- 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 main1. 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?
Konstruktor kopiującyKonstruktor kopiujący to specjalny konstruktor w C++, który służy do tworzenia nowego obiektu na podstawie już istniejącego obiektu tej samej klasy. Jego ogólna postać: ClassName(const ClassName& other); Szczególnie ważny jest w klasach, które zarządzają zasobami, takimi jak:
Domyślny konstruktor kopiujący wykonuje płytką kopię (shallow copy):
co oznacza, że wskaźniki będą wskazywać na tę samą pamięć.
'Należy zdefiniować klasę człowiek (za wykładem): class czlowiek{
char *imie; //skladniki klasy to wskazniki, NIE tablice
char *nazwisko; //kopiujac skladnik po skladniku robimy wierne kopie wskaznikow
public: //pokazujacych na to samo miejsce w pamieci
czlowiek();
czlowiek(char*, char*);
czlowiek(const czlowiek &);
~czlowiek();
void wypiszCzlowieka();
void zmienNazwisko(char*);
};
Oraz wypełnić odpowiednie funkcje składowe (konstruktory oraz funkcje wypiszCzlowieka i zmienNaziwsko).
int main() {
char i[100]= "Jan";
char n[100]= "Kowalski";
char r[100]= "Nowak";
czlowiek c1(i, n);
czlowiek c2(c1);
c1.przedstaw();
c2.przedstaw();
c1.zmiana(r);
c1.przedstaw();
c2.przedstaw();
return 1;
}
| ||||||||||||||||||||||||||||||