Professional Documents
Culture Documents
Zadanie
Zdefiniować klasę bazową Odcinek oraz klasę pochodną Kolo dziedziczoną od klasy Odcinek.
Klasy powinny zawierać konstruktory bez argumentów i z argumentem.
Pole danych klasy Odcinek - odcinek a - zdefiniować z dostępem prywatnym. W klasie pochodnej
Kolo interpretować odcinek a jako promień.
W klasach wprowadzić metody Obwod do obliczenia obwodu i Rysuj do rysowania figury. Do klasy
Odcinek wprowadzić metodę PodajOdcinek zwracającą długość odcinka a.
Klasy umieścić w jednostkach (unit) z nazwami UnitOdcinek i UnitKolo.
Do testowania klasy zbudować graficzny interfejs użytkownika. Interfejs użytkownika musi
zawierać okienko typu TEdit do wprowadzenia długości i klawisz „Start” do uruchomienia obliczeń.
Program musi rysować linię i koło oraz wyświetlać ich obwód.
PaintBox1->Canvas->Brush->Color=clRed;
PaintBox1->Canvas->Ellipse(0,0,pr,pr);
======================================================
Tematy ćwiczenia
• sterowanie dostępem,
• przeciążenie i przesłonięcie metody,
• polimorfizm nazw
Plan
a)
Możliwości sterowania uprawnieniami dostępu do komponentów obiektu danej klasy w
językach C++, Object Pascal zostały przedstawione w poniższej tabeli.
Z tabeli wynika, że widoczność komponentów klasy bazowej może być tylko zmniejszona.
Dziedziczenie publiczne nie zmienia widoczności każdego z komponentów klasy bazowej.
W przypadku dziedziczenia chronionego publiczne komponenty klasy bazowej są
interpretowane w klasie pochodnej jako komponenty chronione (w klasie bazowej), dlatego są one
dostępne w metodach klasy pochodnej i jednocześnie niedostępne dla obiektów klasy pochodnej.
Dziedziczenie prywatne powoduje interpretację publicznych oraz chronionych komponentów
klasy bazowej jako prywatnych. Z tego powodu metody klasy pochodnej już nie mają dostępu do
publicznych oraz chronionych komponentów klasy bazowej, a obiekty klasy pochodnej zostają
pozbawione dostępu do publicznych komponentów klasy bazowej.
Wywołać program Borland C++ Builder i otworzyć poprzedni projekt z hierarchią klas „Odcinek -
(Kwadrat, Prostokąt - Prostopadłościan)”.
b)
Przeciążeniem (ang. overloading) metody nazywa się dodanie do metod klasy nowej metody,
która ma nazwę już istniejącej metody, ale różniącej się zbiorem parametrów formalnych. Zwykle
metody o podobnej nazwie znajdują się w tej samej klasie. Rzadko stosuje się przeciążenie
metody w klasie pochodnej w stosunku do klasy bazowej.
W celu badania przeciążenia metody dodać do klasy Odcinek dwie metody UstawD(), jedną z
argumentem typu int, drugą z argumentem typu double:
void Odcinek::UstawD(int d)
{ // metoda "UstawD"
dlug=d;
}
void Odcinek::UstawD(double d)
{ // metoda "UstawD"
dlug=(int)d;
}
Dodać do procedury wywoływanej przez naciśnięcie klawisza „Start” fragmenty programu
ustawiające długość boków i rysujące kwadraty obydwu typów. Dla kwadratu „rzeczywistego” fragment
tekstu może być następujący:
Kwadrat ob3;
double d3=50.5;
ob3.UstawD(d3);
int d=ob3.PodajD();
Przesłonięciem (ang. overriding) pola, metody lub właściwości nazywa się powtórna
deklaracja komponentu (pola, metody lub właściwości) w klasie pochodnej. Oczywistym jest, że w
przypadku przesłonięcia metody lub właściwości musi zostać zamieniona ich treść
(implementacja). W przypadku przesłonięcia pola danych mogą zostać zmienione prawa dostępu
do pola.
Przykładem przesłonięcia jest wykorzystanie metody Pole() w łańcuchach klas „Odcinek -
Kwadrat” i „Odcinek - Prostokąt - Prostopadłościan”