• Nie Znaleziono Wyników

Dziedziczenie wielobazowe- zastosowanie

N/A
N/A
Protected

Academic year: 2021

Share "Dziedziczenie wielobazowe- zastosowanie"

Copied!
31
0
0

Pełen tekst

(1)

Zofia Kruczkiewicz, ETE8305_9 1

Dziedziczenie wielobazowe- zastosowanie

1. Tworzenie rachunku – nowy typ klasy typu TProdukt3, pochodny klasy typu TProdukt1 – dziedziczenie jednobazowe 2. Dziedziczenie wielobazowe z

powtórzeniami, listy konstruktorów

3. Tworzenie rachunku – nowy typ klasy

typu TProdukt4, pochodny klas typu

TProdukt2 i TProdukt3 – dziedziczenie

dwubazowe

(2)

Zofia Kruczkiewicz, ETE8305_9 2

Dziedziczenie wielobazowe- zastosowanie

1. Tworzenie rachunku – nowy typ klasy

typu TProdukt3, pochodny klasy typu

TProdukt1 – dziedziczenie jednobazowe

(3)

Zofia Kruczkiewicz, ETE8305_9 3

Rodzina produktów – uogólnienie cech wszystkich klas w klasie TProdukt1. Kod źródłowy klas

tworzących rachunek nie ulegają zmianie

TProdukt1

TProdukt2 TProdukt3

(4)

Zofia Kruczkiewicz, ETE8305_9 4

Polimorfizm klasy TAbstrakcyjny Polimorfizm

klasy

TProdukt1

(5)

Zofia Kruczkiewicz, ETE8305_9 5

(6)

Zofia Kruczkiewicz, ETE8305_9 6

Polimorfizm klasy TAbstrakcyjny

Metoda toString przedefiniowująca metodę toString w klasie TProdukt1 operator== oraz operator+=

dziedziczone od klasy TProdukt1

Polimorfizm klasy TProdukt1 Metody Podaj_cene() i

Podaj_promocje() przedefiniowujące wirtualne metody w klasie TProdukt1 Podaj_podatek jest dziedziczona od klasy TProdukt1

(7)

Zofia Kruczkiewicz, ETE8305_9 7

(8)

Zofia Kruczkiewicz, ETE8305_9 8

(9)

Zofia Kruczkiewicz, ETE8305_9 9

(10)

Zofia Kruczkiewicz, ETE8305_9 10

(11)

Zofia Kruczkiewicz, ETE8305_9 11

(12)

Zofia Kruczkiewicz, ETE8305_9 12

(13)

Zofia Kruczkiewicz, ETE8305_9 13

Dziedziczenie wielobazowe- zastosowanie

1. Tworzenie rachunku – nowy typ klasy typu TProdukt3, pochodny klasy typu

TProdukt1 – dziedziczenie jednobazowe 2. Dziedziczenie wielobazowe z

powtórzeniami, listy konstruktorów

(14)

Zofia Kruczkiewicz, ETE8305_9 14

Dziedziczenie wielobazowe z powtórzeniami

lub

TProdukt1

a) b) Klasa

wirtualna

TProdukt2 TProdukt3

TProdukt4

TProdukt1

TProdukt2 TProdukt3

TProdukt4

TProdukt1 TProdukt1

TProdukt2 TProdukt3

TProdukt4

(15)

Zofia Kruczkiewicz, ETE8305_9 15

Dziedziczenie z klasami wirtualnymi, listy konstruktorów

Jeśli część z klas bazowych z listy dziedziczenia wielobazowego

dziedziczą od wspólnej klasy bazowej występuje dziedziczenie wielokrotne składowych tej wspólnej klasy.

MoŜna to zjawisko wyeliminować przez deklarowanie tej klasy w liście

dziedziczenia kaŜdej z klas bazowych

jako klasy wirtualnej.

(16)

Zofia Kruczkiewicz, ETE8305_9 16

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

{...};

(17)

Zofia Kruczkiewicz, ETE8305_9 17

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), TProdukt3(p)

{ }

(18)

Zofia Kruczkiewicz, ETE8305_9 18

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

{...};

(19)

Zofia Kruczkiewicz, ETE8305_9 19

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)

{ }

(20)

Zofia Kruczkiewicz, ETE8305_9 20

Dziedziczenie z klasami wirtualnymi, listy konstruktorów

1. Słowo virtual moŜe być umieszczone przed lub za słowem public (lub private).

2. W zwykłym wielobazowym dziedziczeniu konstruktor klasy dziedziczącej wielobazowo przekazuje dane do konstruktorów klas z listy

dziedziczenia, które następnie przekazują dane do konstruktora swojej klasy bazowej niezaleŜnie - nawet jeśli jest to ta sama klasa.

3. Kolejność wywoływania konstruktorów klas jest taka sama, jak kolejność umieszczenia tych klas w liście dziedziczenia (zazwyczaj od lewej do prawej strony).

4. W przypadku klasy wirtualnej, w nagłówku konstruktora klasy pochodnej, dziedziczącej wielobazowo trzeba wymienić argumenty przeznaczone dla konstruktora klasy wirtualnej. Stąd w liście konstruktorów oprócz

konstruktorów klas bazowych musi być wymieniony konstruktor klasy wirtualnej, który jest wywoływany zawsze jako pierwszy i tylko raz, gdyŜ ignorowane są wywołania tego konstruktora przez konstruktory klas bazowych.

5. W zwykłym i wirtualnym dziedziczeniu w przypadku zdefiniowania konstruktorów domniemanych lub w przypadku braku jawnych konstruktorów stosowanie list parametrów nie jest obowiązkowe.

6. Wywołania metod klasy wirtualnej przez obiekty klasy dziedziczącej wielobazowo jest jednoznaczne.

(21)

Zofia Kruczkiewicz, ETE8305_9 21

Dziedziczenie wielobazowe- zastosowanie

3. Tworzenie rachunku – nowy typ klasy typu TProdukt4, pochodny klas typu TProdukt2 i TProdukt3 – dziedziczenie dwubazowe

1. Tworzenie rachunku – nowy typ klasy typu TProdukt3, pochodny klasy typu TProdukt1 – dziedziczenie jednobazowe 2. Dziedziczenie wielobazowe z

powtórzeniami, listy konstruktorów

(22)

Zofia Kruczkiewicz, ETE8305_9 22

(23)

Zofia Kruczkiewicz, ETE8305_9 23

(24)

Zofia Kruczkiewicz, ETE8305_9 24

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

(25)

Zofia Kruczkiewicz, ETE8305_9 25

(26)

Zofia Kruczkiewicz, ETE8305_9 26

(27)

Zofia Kruczkiewicz, ETE8305_9 27

(28)

Zofia Kruczkiewicz, ETE8305_9 28

(29)

Zofia Kruczkiewicz, ETE8305_9 29

(30)

Zofia Kruczkiewicz, ETE8305_9 30

(31)

Zofia Kruczkiewicz, ETE8305_9 31

Cytaty

Powiązane dokumenty

gdyż liczba permutacji w zespołach złożonych z к różnych czynników pierwszych jest niniejsza (dla к > 2) od liczby wszystkich permutacji, a tych z kolei

// faktycznie tworzony jest obiekt klasy RECTANGLE // wszystkie inne jawne metody klasy są dostępne jako // odziedziczone z klasy

Pojawi się zatem mechanizm polimorfizmu - czyli metoda Rysuj, w zależności od obiektu, na którymjest wykonywana,.. sporządzi inny

Kiedy stosujemy związki strukturalne między klasami typu powiązanie (Association) i agregacja

Opisz metody klasy Assert, które służą do badania warości typu boolean (typ metody, parametry metod oraz wynik).. Przedstaw rolę klasy

Dziedziczenie wielobazowe bez powtórzeń – klasa TProdukt1 bez zmian, natomiast TProdukt2 w liście dziedziczenia ma. klasę TProdukt1, która nie jest juŜ

- Homozygoty dominujące posiadają dwa allele dominujące, a więc syntezują dwa razy więcej barwnika niż heterozygoty, które posiadają tylko jeden allel dominujący. -

Korzystając z programu komputerowego zapoznać się z tworzeniem grup punktowych poprzez wybór trzech elementów symetrii, które będą poprawnymi generatorami danej grupy..