To tylko jedna z 27 stron tej notatki. Zaloguj się aby zobaczyć ten dokument.
Zobacz
całą notatkę
Konstruowanie obiektów klas Wykład 5 10/10/25 2 Konstruktory Konstruktor jest specjalną funkcją składową uruchamianą automatycznie przy definiowaniu każdego obiektu danej klasy Służy do nadawania wartości początkowych składnikom tworzonych obiektów Może być przeładowany Bardzo częsta praktyka Nie zwraca nic Nie może być typu static Nie może być typu virtual Może być wywoływany do tworzenia obiektów z przydomkiem const i volatile 10/10/25 3 Sposoby wywoływania konstruktorów Obiekty lokalne Automatyczne – powstają gdy program napotka ich definicję, a przestają istnieć kiedy program wychodzi poza blok, w którym one powstały Statyczne - konstruktor wykonany zostanie na początku programu przed wywołaniem funkcji main() . Zakres ważności odnosi się do bloku. Czas życia równy jest czasowi pracy programu 10/10/25 4 Sposoby wywoływania konstruktorów... Obiekty globalne – tworzone są przed wykonaniem funkcji main() tak jak statyczne. Czas życia równy czasowi wykonywania programu. Zakres ważności cały plik Obiekty tworzone operatorem new – konstruktor wywoływany przy tworzeniu. Czas życia od momentu wykonanie new do końca programu lub wywołania delete . Zakres ważności, wszędzie tam gdzie jest dostępny choć jeden wskaźnik pokazujący na dany obiekt UWAGA utrata wskaźnika nie oznacza zniszczenia obiektu!!! 10/10/25 5 Konstruktor domniemany Konstruktor domniemany to taki, który można wywołać bez żadnych argumentów Może nie mieć żadnych argumentów Może mieć wszystkie argumenty domyślne Klasa może mieć tylko jeden konstruktor domniemany Jeśli klasa nie ma żadnego konstruktora to sam kompilator automatycznie wygeneruje konstruktor domniemany Jeżeli klasa ma zdefiniowany chociaż jeden niedomyślny konstruktor to kompilator go już nie utworzy 10/10/25 6 Lista inicjalizacyjna Jeżeli w klasie mamy obiekty z przydomkiem const to Nie możemy nadać wartości w ciele klasy w sposób const float f = 3.14; Do nadawania wartości obiektom const służy lista inicjalizacyjna konstruktora klasa::klasa(args) : lista {...} Wykonanie konstruktora odbywa się w dwóch etapach Inicjalizacja składników Wykonanie instrukcji w ciele konstruktora 10/10/25 7 Lista inicjalizacyjna... Listę zapisujemy w następujący sposób klasa::klasa(int a, float f) : zm_const_int(a), zm_const_float(f)
(…)
… wirtualną
Działa odwrotnie niż konstruktor konwertujący
10/10/25
Konwertuje z typu danej klasy, której jest składową na inny
typ
21
Który sposób wybrać?
Przy konwersji obiektu klasy A na typ wbudowany
tylko funkcja konwertująca
Przy konwersji obiektu klasy A na obiekt klasy B
10/10/25
Po pierwsze funkcja konwertująca w klasie A
Tylko w sytuacji braku możliwości zmian klasy A
konstruktor…
… to jest wywoływany
automatycznie stworzony konstruktor domyślny
Jeżeli nie posiada konstruktora domyślnego to jej
inicjalizacja musi pojawić się na liście
Konstruktory składników są wywoływane przed
wywołaniem konstruktora klasy, w której się
znajdują (destruktory odwrotnie)
Przykład cpp_5.2
10/10/25
8
Konstruktor kopiujący
Konstruktor kopiujący jest wywoływany z jednym
argumentem będącym referencją do tej samej…
… statycznej metodzie dla
każdego sposobu na utworzenie obiektu danej klasy
W ten sposób można stworzyć klasę finalną tzn. taką, po której się nie da
dziedziczyć
Przykład cpp_5.7
10/10/25
12
Destruktory
Destruktor wywoływany jest automatycznie przy
likwidacji obiektu
Destruktor nie zwraca nic
Destruktor nie może być przeładowany
Jawne wywołanie destruktora wykonuje polecenia
w nim zawarte…
… tablic wskaźników
10/10/25
15
Konwersje (typów)
Konwersje (typów) – innymi słowy
przekształcenia obiektów jednego typu na
inny
Konwersje niejawne
Konwersje jawne
Konwersje typu jakim jest klasa muszą
zostać zdefiniowane przez programistę,
kompilator nie wykona konwersji jeśli
nawet wydaje się nam oczywista
10/10/25
16
Konwersje niejawne
Przy wywołaniu funkcji
Przy zwracaniu rezultatu…
... zobacz całą notatkę
Komentarze użytkowników (0)