Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Języki programowania z programowaniem obiektowym Laboratorium 12: Konstruktory i destruktory, składniki statyczne klasy. Opracowali: dr hab. inż. Witold Beluch witold.beluch@polsl.pl dr inż. Jacek Ptaszny jacek.ptaszny@polsl.pl Gliwice 2016
Języki programowania z programowaniem obiektowym. Laboratorium 12 1 1. Konstruktor Konstruktor to specjalna funkcja składowa klasy, która ma nazwę identyczną z nazwą klasy. Np. jeśli mamy następującą klasę: to konstruktor może mieć postać (tu: tylko deklaracja wewnątrz ciała klasy): a jego definicja (tu: na zewnątrz klasy): Konstruktor jest wywoływany automatycznie w momencie tworzenia obiektu. Przed nazwą konstruktora nie może być żadnego określenia typu zwracanego (zatem nie może być na końcu jego definicji słowa return). Konstruktor może służyć do nadania wartości początkowych danym składowym obiektu (wbrew swej nazwie jest raczej dekoratorem wnętrz...) Jeśli w klasie nie ma zdefiniowanego żadnego konstruktora, to kompilator wygeneruje tzw. konstruktor domniemany (jednakże konstruktor ten nie wykona żadnego przypisania). Konstruktor może wywołać inną funkcję składową swojej klasy. Przykład 1:
Języki programowania z programowaniem obiektowym. Laboratorium 12 2 1.1. Konstruktor z argumentami domyślnymi Konstruktory mogą posiadać argumenty domyślne (wszystkie bądź nie). Przypomnienie: argumenty domyślne umieszcza się najbardziej z prawej strony... Konstruktor domyślny to taki konstruktor w którym wszystkie argumenty mają określone wartości domyślne, np: W tym przypadku jest tak, jak gdyby istniały cztery konstruktory: Uwagi: W danej klasie może istnieć tylko jeden konstruktor domyślny. Konstruktor domyślny może być albo wywołany bez podania żadnych argumentów (wszystkie argumenty są wtedy domyślne) albo z ich podaniem. Domyślne argumenty deklaruje się wyłącznie w deklaracji konstruktora. Przykład 2: 1.2. Konstruktor - przeładowanie nazwy Konstruktor jest funkcją, przy której najczęściej spotyka się przeładowanie nazwy (patrz: instrukcja do laboratorium 10). Dzięki temu dane składowym klasy mogą być w różny sposób przypisywane wartości przy użyciu konstruktora (a w zasadzie: konstruktorów).
Języki programowania z programowaniem obiektowym. Laboratorium 12 3 Przykład 3: 2. Destruktor Destruktor to specjalna funkcja składowa klasy, która ma nazwę identyczną z nazwą klasy poprzedzoną znakiem tyldy ( ). I tak dla klasy Pojazd z punktu 1 deklaracja destruktora ma postać: Destruktor jest wywoływany automatycznie w momencie likwidowania obiektu. Uwagi: Przed nazwą destruktora nie może być żadnego określenia typu zwracanego. Destruktor może służyć do wykonania pewnych działań ( prac porządkowych ) na moment przed zlikwidowaniem obiektu. Destruktor jest wywoływany bez żadnych argumentów. W związku z tym jest funkcją, której nazwy nie można przeładować. Destruktor może wywołać inną funkcję składową swojej klasy. Jeśli w klasie nie ma zdefiniowanego destruktora, kompilator sam go wygeneruje.
Języki programowania z programowaniem obiektowym. Laboratorium 12 4 Definicja klasy Dane z przykładu 2 wzbogaconej o destruktor może wyglądać np. tak: 3. Składniki statyczne klasy Statyczna dana składowa klasy to dana składowa zadeklarowana jako static, np.: static int licznik; Dana taka jest tworzona w pamięci jednokrotnie i jest daną wspólną dla wszystkich obiektów klasy (niejako globalną daną klasy 1 ). Przykład 4: Czy wiesz, że... Studenckie Koło Naukowe Metod Komputerowych począwszy od 2007. roku organizuje coroczną studencką konferencję naukową, na której również i Ty możesz zaprezentować wyniki swoich projektów i nawiązać kontakty z przedstawicielami przemysłu. 1 Dla zainteresowanych: dlaczego nie zmienna globalna? Oto powody: (a) zmienne globalne są dostępnie nie tylko dla klasy (to jest najważniejszy powód); (b) zbyt wiele zmiennych globalnych nie świadczy o dobrym stylu programowania; (c) składnik statyczny klasy może być private (choć oczywiście ma to swe konsekwencje...).