> C++ dziedziczenie Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1432108800
> Dziedziczenie Dziedziczenie C++ dziedziczenie 2 / 13
> Dziedziczenie Dziedziczenie * to technika pozwalająca na definiowanie nowej klasy przy wykorzystaniu klasy już wcześniej istniejącej. * oznacza przejmowanie własności innej klasy i poddanie ich wyspecjalizowaniu. C++ dziedziczenie 2 / 13
> Dziedziczenie Technika dziedziczenia umożliwia tworzenie nowych klas na bazie klas już istniejących. Klasa, która dziedziczy po innej klasie, przejmuje jej metody i atrybuty oraz najczęściej dodaje własne, by dostosować ją do konkretnego zadania. ++ dziedziczenie 3 / 13
> Dziedziczenie Technika dziedziczenia umożliwia tworzenie nowych klas na bazie klas już istniejących. Klasa, która dziedziczy po innej klasie, przejmuje jej metody i atrybuty oraz najczęściej dodaje własne, by dostosować ją do konkretnego zadania. Wyjątkiem są konstruktory i destruktory nie są dziedziczone. ++ dziedziczenie 3 / 13
> Dziedziczenie Technika dziedziczenia umożliwia tworzenie nowych klas na bazie klas już istniejących. Klasa, która dziedziczy po innej klasie, przejmuje jej metody i atrybuty oraz najczęściej dodaje własne, by dostosować ją do konkretnego zadania. Wyjątkiem są konstruktory i destruktory nie są dziedziczone. Klasę, po której się dziedziczy ++ dziedziczenie 3 / 13
> Dziedziczenie Technika dziedziczenia umożliwia tworzenie nowych klas na bazie klas już istniejących. Klasa, która dziedziczy po innej klasie, przejmuje jej metody i atrybuty oraz najczęściej dodaje własne, by dostosować ją do konkretnego zadania. Wyjątkiem są konstruktory i destruktory nie są dziedziczone. Klasę, po której się dziedziczy określa się nadklasą, klasą bazową lub klasą macierzystą. ++ dziedziczenie 3 / 13
> Dziedziczenie Technika dziedziczenia umożliwia tworzenie nowych klas na bazie klas już istniejących. Klasa, która dziedziczy po innej klasie, przejmuje jej metody i atrybuty oraz najczęściej dodaje własne, by dostosować ją do konkretnego zadania. Wyjątkiem są konstruktory i destruktory nie są dziedziczone. Klasę, po której się dziedziczy określa się nadklasą, klasą bazową lub klasą macierzystą. Nowo utworzona klasa ++ dziedziczenie 3 / 13
> Dziedziczenie Technika dziedziczenia umożliwia tworzenie nowych klas na bazie klas już istniejących. Klasa, która dziedziczy po innej klasie, przejmuje jej metody i atrybuty oraz najczęściej dodaje własne, by dostosować ją do konkretnego zadania. Wyjątkiem są konstruktory i destruktory nie są dziedziczone. Klasę, po której się dziedziczy określa się nadklasą, klasą bazową lub klasą macierzystą. Nowo utworzona klasa nazywa się podklasą, klasą pochodną lub klasą potomną. C++ dziedziczenie 3 / 13
> Kawałek kodu C++ dziedziczenie 4 / 13
> Konstruktory i destruktory a hierarchia klas ++ dziedziczenie 5 / 13
* Pobrać ze strony plik Osoba.cpp oraz zapoznać się z jego zawartością. * Następnie odpowiedzieć na następujące pytania: * Jaka jest kolejność aktywacji konstruktorów i destruktorów, gdy obiekt tworzony jest jako Absolwent a;? * Jaka jest kolejność aktywacji konstruktorów i destruktorów, gdy obiekt tworzony jest jako Absolwent a( 10 );? * Usunąć aktywację konstruktorów klas bazowych z listy inicjalizacyjnej konstruktorów klas pochodnych Absolwent i Student oraz sprawdzić, jak sytuacja wygląda po rekompilacji programu. C++ dziedziczenie 6 / 13
> Modyfikatory dostępu dostępne dla wszystkich ++ dziedziczenie 7 / 13
> Modyfikatory dostępu public (publiczne) dostępne dla wszystkich ++ dziedziczenie 7 / 13
> Modyfikatory dostępu public (publiczne) dostępne dla wszystkich dostępne tylko z wnętrza klasy ++ dziedziczenie 7 / 13
> Modyfikatory dostępu public (publiczne) dostępne dla wszystkich private (prywatne) dostępne tylko z wnętrza klasy ++ dziedziczenie 7 / 13
> Modyfikatory dostępu public (publiczne) dostępne dla wszystkich dostępne dla potomków private (prywatne) dostępne tylko z wnętrza klasy ++ dziedziczenie 7 / 13
> Modyfikatory dostępu public (publiczne) dostępne dla wszystkich protected (chronione) dostępne dla potomków private (prywatne) dostępne tylko z wnętrza klasy ++ dziedziczenie 7 / 13
> Dziedziczenie wielobazowe C++ dziedziczenie 8 / 13
> Dziedziczenie wielobazowe C++ dziedziczenie 9 / 13
> Dziedziczenie wielobazowe * Dla obiektu stolik aktywowany jest konstruktor klasy OkraglyStol. * Ponieważ klasa ta dziedziczy po dwóch klasach (Stol, Okrag), na liście inicjalizacyjnej tego konstruktora umieszczone są odwołania do dwóch konstruktorów. * W trakcie przetwarzania listy inicjalizacyjnej następuje aktywowanie obu tych konstruktorów. * Kolejność aktywowania konstruktorów dla obiektu klasy pochodnej wynika z kolejności występowania nazw klas bazowych w deklaracji tej klasy. Nie jest istotna kolejność ich umieszczenia na liście inicjalizacyjnej konstruktora klasy pochodnej. C++ dziedziczenie 10 / 13
> Ćwiczenie hierarchie 1. Napisz program, w którym zdefiniujesz jedną z wymienionych hierarchii:... <LOSOWANIE!> 2. Zadbaj o poprawność schematu dziedziczenia, adekwatne konstruktory (bezparametrowy, parametrowy, kopiujący) i destruktory, odpowiednie zadeklarowanie atrybutów i metod (prywatne, publiczne i chronione) w zależności od poziomu szczegółowości, itd. 3. Enkapsulacja jest ważna metody get i set. 4. Pamiętaj, że umiesz też przeciążać operatory. 5. Niezależnie od wszystkiego prowadź ewidencję, ile obiektów danej klasy aktualnie istnieje. 6. Dodaj cokolwiek jeszcze ciekawego Ci przyjdzie do głowy 7. W main() powołaj do życia kilka obiektów stworzonych klas. Pokaż na ich przykładzie działanie zaimplementowanych funkcjonalności. C++ dziedziczenie 11 / 13
> Co dalej? * dyrektywy preprocesora * funkcje zaprzyjaźnione * metody wirtualne * konwersje * STL (Standard Template Library) * szablony funkcji i klas * wyjątki ++ dziedziczenie 12 / 13
> Co dalej? * Akademickie Mistrzostwa Polski w Programowaniu Zespołowym (październik) * Potyczki Algorytmiczne http://potyczki.mimuw.edu.pl/ (jesień) archiwum zadań: http://main.edu.pl/pl/archive C++ dziedziczenie 12 / 13
C++ dziedziczenie 13 / 13