Paradygmaty programowania/Ćwiczenia 5: Programowanie obiektowe — przegląd: Różnice pomiędzy wersjami
(Brak różnic)
|
Wersja z 14:26, 6 sie 2006
Zadanie 1
Co wypisuje poniższy program w języku C++? Odpowiedz, a potem skompiluj program i sprawdź... Uwaga — do poprawnego skompilowania programu potrzebne będzie dołączenie pliku nagłówkowego (#include <iostream>) i deklaracja przestrzeni nazw (using namespace std;).
class A { public: virtual void f() { cout << ”A.f”; g(); } void g() { cout << ”A.g”; h(); } virtual void h() { cout << ”A.h”; } };
class B: public A { public: virtual void f() { cout << ”B.f”; g(); } void g() { cout << ”B.g”; h(); } virtual void h() { cout << ”B.h”; } };
void main() { A x = B(); A* y = new B(); x.f(); y–>f(); }
Zadanie 2
Jak zmieni się wynik programu z zadania 1, jeśli usuniemy deklarację virtual przy funkcji f w klasie A? Które deklaracje virtual można usunąć bez żadnej zmiany zachowania programu?
Zadanie 3
Wykorzystanie dynamicznego wiązania wywołań z metodami oznacza, że często będziemy odwoływali się do obiektów z klas pochodnych za pomocą zmiennej (wskaźnika) z klasy bazowej. Jakie są tego konsekwencje dla dealokacji pamięci w językach, w których jest ona jawna? Czy z alokacją jest podobnie?
Zadanie 4
Napisz program w Javie, dzięki któremu będzie można zobaczyć, czy i kiedy następuje wywołanie metody finalize. Powinien on dać się uruchomić w różnych wariantach, w których będzie potrzebował mniej lub więcej pamięci.
Zadanie 5
Przyjrzyj się dwom poniższym klasom. Czy taki układ to dobry pomysł?
class Silnik {...}; class Samochód : Silnik {...};
Zadanie 6
Popatrz teraz na takie dwie klasy i porównaj ten przykład z sytuacją z poprzedniego zadania.
class Samochód {...}; class Ciężarówka : Samochód {...};