You are on page 1of 3

Zadanie sprawdzające w środowisku Borland C++ Builder na temat

„Dziedziczenie klas (klasa pochodna, klasa bazowa, hierarchia klas)”

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.

Pokazać prowadzącemu pracę programu w celu zaliczenia.

Uwaga. Rysunek koła można wyświetlić w obiekcie typu PaintBox następująco:

PaintBox1->Canvas->Brush->Color=clRed;
PaintBox1->Canvas->Ellipse(0,0,pr,pr);

gdzie pr - promień koła w pikselach.

======================================================

Ćwiczenie laboratoryjne w środowisku Borland C++ Builder na temat

„Dziedziczenie klas (sterowanie dostępem, przeciążenie i przesłonięcie


metody, polimorfizm nazw)”

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.

Zmiany dostępu do komponentów klasy bazowej

Typ dziedziczenia Dostęp do komponentów w klasie bazowej


Publiczny Chroniony Prywatny
Publiczny Publiczny
Chroniony
Chroniony Chroniony Prywatny
Prywatny Prywatny

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)”.

Zmienić kwalifikator public dziedziczenia klasy Kwadrat od klasy Odcinek na protected.


Skompilować i otrzymać komunikat kompilatora.
Wykasować słowo protected, skompilować ponownie i otrzymać komunikat kompilatora.

W celu zaliczenia punktu pokazać prowadzącemu komunikat i odpowiedzieć na pytanie:

Jakiego rodzaju dziedziczenie następuje w przypadku braku kwalifikatora?.

Uwaga. Od tej chwili zawsze piszemy kwalifikator dziedziczenia!

Powrócić do kwalifikatora public dla dziedziczenia klasy Kwadrat od klasy Odcinek.

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”

Przeciążanie i przesłonięcie metod jest wykazaniem tzw. polimorfizmu nazw.


W programowaniu zorientowanym obiektowo polimorfizm nazw jest właściwością, która
pozwala na nadawanie podobnym działaniom jednej nazwy.
W przypadku przeciążenia metody kompilator wybiera jeden z wariantów w zależności od
liczby i typów faktycznych argumentów metody.
W przypadku przesłonięcia komponentu kompilator przygotowuje dodatkowy fragment kodu
z wariantami, z których jeden jest wybierany w czasie wykonywania programu w zależności od
faktycznego typu obiektu.

Pokazać prowadzącemu pracę programu w celu zaliczenia.

Zapisać projekt w trybie „File / Save”.


Zamknąć program Borland C++ Builder.

You might also like