• Nie Znaleziono Wyników

Dziedziczenie wielobazowe- dodatek

N/A
N/A
Protected

Academic year: 2021

Share "Dziedziczenie wielobazowe- dodatek"

Copied!
52
0
0

Pełen tekst

(1)

Dziedziczenie wielobazowe- dodatek

1. Dziedziczenie wielobazowe z powtórzeniami z klasą wirtualną, listy konstruktorów – listy

argumentów konstruktorów

2. Dziedziczenie wielobazowe z powtórzeniami bez klasy wirtualnej, listy konstruktorów –

problemy z polimorfizmem związanym z klasą TProdukt1 dziedziczoną dwukrotnie

3. Dziedziczenie wielobazowe bez powtórzeń 4. Wzorzec fasady – klasa TAplikacja

hermetyzująca dostęp do kolekcji produktów i

(2)

Dziedziczenie wielobazowe- dodatek

1. Dziedziczenie wielobazowe z powtórzeniami z klasą wirtualną, listy konstruktorów – listy

argumentów konstruktorów

(3)

Dziedziczenie wielobazowe z powtórzeniami

Klasa wirtualna

TProdukt1

TProdukt2 TProdukt3

TProdukt4

(4)

Konstruktory klas dziedziczących wielobazowo z klasą wirtualną

TProdukt4::TProdukt4(string nazwa_, float cena_, float podatek_, float promocja_):

TProdukt1(nazwa_, cena_),

TProdukt2(nazwa_,cena_,podatek_), TProdukt3(nazwa_,cena_,promocja_)

{ }

TProdukt4::TProdukt4(TProdukt4& p):

TProdukt1(p),

TProdukt2(p),

(5)

Deklaracje klas dziedziczących wielobazowo z klasą wirtualną

np.

class TProdukt1 {...};

class TProdukt2 : public virtual TProdukt1 {...};

class TProdukt3 : public virtual TProdukt1 {...};

class TProdukt4 : public TProdukt2, public TProdukt3

{...};

(6)
(7)
(8)

TProdukt4 dziedziczy od dwóch klas TProdukt2, TProdukt2 i pośrednio od TProdukt1

(9)

Brak w liście argumentów

konstruktora klasy

TProdukt4

konstruktora klasy wirtualnej

TProdukt1

oznacza

wywołanie i wykonanie konstruktora tej klasy z

domniemaną listą parametrów.

Konstruktor klasy wirtualnej jest wywołany i wykonany jako pierwszy. Następnie

wywoływane i wykonywane są

konstruktory w kolejności (od

lewej do prawej) umieszczenia

ich klas w liście dziedziczenia

(10)
(11)
(12)

Dziedziczenie wielobazowe- dodatek

1. Dziedziczenie wielobazowe z powtórzeniami z klasą wirtualną, listy konstruktorów – listy

argumentów konstruktora

2. Dziedziczenie wielobazowe z powtórzeniami bez klasy wirtualnej, listy konstruktorów –

problemy z polimorfizmem związanym z klasą

TProdukt1 dziedziczoną dwukrotnie

(13)

Dziedziczenie wielobazowe z powtórzeniami

TProdukt1

TProdukt2 TProdukt3

TProdukt4

TProdukt1

(14)

Deklaracje klas dziedziczących wielobazowo bez klasy wirtualnej

np.

class TProdukt1 {...};

class TProdukt2 : public TProdukt1 {...};

class TProdukt3 : public TProdukt1 {...};

class TProdukt4 : public TProdukt2, public TProdukt3

{...};

(15)

Konstruktory klas dziedziczących wielobazowo bez klasy wirtualnej

TProdukt4::TProdukt4(string nazwa_, float cena_, float podatek_, float promocja_):

TProdukt2(nazwa_,cena_,podatek_), TProdukt3(nazwa_,cena_,promocja_)

{ }

TProdukt4::TProdukt4(TProdukt4& p):

TProdukt2(p), TProdukt3(p)

{ }

(16)
(17)
(18)

TProdukt4 dziedziczy od dwóch klas TProdukt2, TProdukt2 i podwójnie od TProdukt1

(19)
(20)
(21)

Przykład 1

(22)
(23)

Przykład 2

(24)
(25)
(26)

Dziedziczenie wielobazowe- dodatek

3. Dziedziczenie wielobazowe bez powtórzeń

1. Dziedziczenie wielobazowe z powtórzeniami z klasą wirtualną, listy konstruktorów – listy

argumentów konstruktorów

2. Dziedziczenie wielobazowe z powtórzeniami bez

klasy wirtualnej, listy konstruktorów – problemy

z polimorfizmem związanym z klasą TProdukt1

dziedziczoną dwukrotnie

(27)

TProdukt1

TProdukt2 TProdukt3

TProdukt4

Dziedziczenie wielobazowe bez powtórzeń – klasa TProdukt1 bez zmian, natomiast TProdukt2 w liście dziedziczenia ma

klasę TProdukt1, która nie jest juŜ klasą wirtualną. Klasa TProdukt3 dostarcza jedynie promocję i nie jest stosowana

do tworzenia samodzielnych obiektów

(28)
(29)
(30)
(31)
(32)

Metoda wirtualna

przesłaniająca metodę

wirtualną Podaj_promocje() z

klasy TProdukt1

(33)

ZaleŜnie od kolejności umieszczenia klas w liście argumentów (od lewej do prawej), w takiej kolejności wywołane i wykonane są konstruktory tych klas.

Oznacza to, Ŝe pierwszy jest wywołany konstruktor

TProdukt2, a wykonane są:

TAbstrakcyjny, TProdukt1, a na końcu TProdukt2.

Następnie wykonany jest

konstruktor TProdukt3. Nie

moŜna wywołać konstruktora

klasy TProdukt1, poniewaŜ

(34)

Wskazanie, która z

dziedziczonych

metod powinna

być wywołana

(35)
(36)

Nie korzysta się z obiektów typu TProdukt3

(37)
(38)
(39)
(40)

Dziedziczenie wielobazowe- dodatek

4. Wzorzec fasady – klasa TAplikacja

1. Dziedziczenie wielobazowe z powtórzeniami z klasą wirtualną, listy konstruktorów – listy

argumentów konstruktorów

2. Dziedziczenie wielobazowe z powtórzeniami bez klasy wirtualnej, listy konstruktorów – problemy z polimorfizmem związanym z klasą TProdukt1 dziedziczoną dwukrotnie

3. Dziedziczenie wielobazowe bez powtórzeń

(41)

Dziedziczenie wielobazowe z powtórzeniami

Klasa wirtualna

TProdukt1

TProdukt2 TProdukt3

TProdukt4

(42)
(43)
(44)

TProdukt4 dziedziczy od dwóch klas TProdukt2, TProdukt2 i pośrednio od TProdukt1

(45)

Metody klasy TAplikacja

hermetyzują operacje na kolekcji

produktów i kolekcji zakupów

(46)
(47)
(48)
(49)
(50)
(51)
(52)

Cytaty

Powiązane dokumenty

spraw ludno?ci polskiej na terenie ,Wolnego Miasta. Sprawa wykorzystania portu

Klasa napis posiada: pola wiersz w postaci tablicy dynamicznej znaków i dlugosc do przechowywania długości wiersza oraz: konstruktory zwykły i kopiujący,

– zmiana promowania ze względu na producenta produktu - tylko modyfikacja kodu produktów przez polimorfizm i dziedziczenie (TProdukt1, TProdukt2). – zmiana promowania ze względu

Przykładowo mając dwie, zaimplementowane klasy, można zbudować nową klasę, która dziedziczy.. jednocześnie właściwości obu

Na podstawie dramatu Juliusza Słowackiego oraz dwóch wybranych przez Ciebie przykładów literackich napisz wypracowanie, w którym udowodnisz, ˝e nie ma zbrodni bez kary..

Skutki prawne odrzucenia spadku w przypadku dziedziczenia ustawowego oraz dziedziczenia testamentowego.. Stwierdzenie nabycia spadku i jego skutki prawne, właściwość

Z jednej strony, wykonanie dzieła muzycznego jest jego realnym stawaniem się tu i teraz, z drugiej – świat muzyczny zdaje się wciągać swoich odbiorców do innego

Przykrywanie metod, czyli definiowanie metod w klasie pochodnej o nazwie i parametrach takich samych jak w klasie bazowej, ma zwykle na celu przystosowanie metody do