2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs...

9
2.4 Przykłady programowania w C�� - kurs podstawowy 2.4 Dziedziczenie Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładach programów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo aby napisać program np. na grę komputerową. Dlatego powoli będziemy wprowadzać na kolejnych przykładach nowe możliwości definiowania klas. Jedną z takich możliwości jest własność dziedzi- czenia klas. Wyobraźmy sobie że definiujemy najpierw klasę bazową (rodzicielską) definiującą pewne ogólne własności zagadnienia a dopiero potem klasy pochodne dziedziczące pewne ce- chy po klasie bazowej. Na przykład w kodzie programu poniżej mamy dwie różne klasy bazowe figura i PaletaKolorow i jedną klasę pochodną kwadrat. W klasie figura są tylko ogólne cechy figury: liczba punktów N i liczba boków Nbokow. Klasa która po niej dziedziczy to klasa kwadrat i ma ona bezpośredni dostęp do pól protected klasy figura i pól publicznych ale nie ma dostępu do pól private. Do pól prywatnych dostęp jest wyłącznie poprzez metody z sekcji publicznej. Pola protected są traktowane jak pola private dla obiektów innych klas które nie dziedziczą. Poniżej mamy wydruk kodu programu figury.cc z komentarzami. W poniższym programie zauwazymy trzeci rodzaj praw dostępu do pól klasy, tzw. pola protected. Mają one sens pól prywatnych ale dostepnych dla klas pochodnych tj. dziedziczących po klasie bazowej. 1 �i n c l u d e iostream > 2 3 using namespace std ; 4 5 class figura //klasa bazowa (rodzicielska) 6 protected : //tutaj sekcja protected tak jak prywatna 7 //ale dla klasy ktora dziedziczy po klasie figura jest dostepna 8 int N; //liczba wezlow 9 private : //tuaj nawet klasa ktora dziedziczy po klasie figura nie ma 10 //wstepu inaczej 11 //niz poprzez metody z sekcji publicznej 12 int Nbokow ; //liczba bokow 13 public : 14 figura( int n) N=n ; Nbokow=n ; } //konstruktor 15 ˜figura() �} //destruktor 16 17 int LiczbaWezlow () return N; } //zwraca liczbe wezlow figury 18 19 void PokazNaEkranieWartoscZmiennejNbokow () 20 cout ��”Liczab bokow Nbokow= ��Nbokow ��endl ; //pokazuje na ekranie 21 //liczbe bokow 22 } 23 24 25 } ; //pamietamy o sredniku 26 27 class PaletaKolorow //tutaj klasa zawiera tylko pola publiczne 28 protected : 29 30 int kolor ; //dostep tylko dla klas dziedziczacych po klasie 31 //PaletaKolorow 32 33 public : 34 void WpiszKolor() 35 36 cout ��”Wybierz liczbe calkowita sposrod Bialy (0), Czerwony (1), Niebieski (2).” ; M�R� Dudek dla < OWK� > http://www�owk�if�uz�zgora�pl 45 Materiał dystrybuowany bezpłatnie

Transcript of 2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs...

Page 1: 2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy Kolejny przykład pokazuje że korzystanie z dziedziczenia klas może powodować

2.4 Dziedziczenie Przykłady programowania w C�� - kurs podstawowy

2.4 Dziedziczenie

Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładachprogramów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo abynapisać program np. na grę komputerową. Dlatego powoli będziemy wprowadzać na kolejnychprzykładach nowe możliwości definiowania klas. Jedną z takich możliwości jest własność dziedzi-czenia klas. Wyobraźmy sobie że definiujemy najpierw klasę bazową (rodzicielską) definiującąpewne ogólne własności zagadnienia a dopiero potem klasy pochodne dziedziczące pewne ce-chy po klasie bazowej. Na przykład w kodzie programu poniżej mamy dwie różne klasy bazowefigura i PaletaKolorow i jedną klasę pochodną kwadrat. W klasie figura są tylko ogólnecechy figury: liczba punktów N i liczba boków Nbokow. Klasa która po niej dziedziczy to klasakwadrat i ma ona bezpośredni dostęp do pól protected klasy figura i pól publicznych ale niema dostępu do pól private. Do pól prywatnych dostęp jest wyłącznie poprzez metody z sekcjipublicznej. Pola protected są traktowane jak pola private dla obiektów innych klas które niedziedziczą.

Poniżej mamy wydruk kodu programu figury.cc z komentarzami. W poniższym programiezauwazymy trzeci rodzaj praw dostępu do pól klasy, tzw. pola protected. Mają one sens pólprywatnych ale dostepnych dla klas pochodnych tj. dziedziczących po klasie bazowej.

1 �include �iostream>23 using namespace std ;45 class f i g u r a � // k l a s a bazowa ( r o d z i c i e l s k a )6 protected : // t u t a j s e k c j a p ro t e c t ed tak jak prywatna7 // a l e d l a k l a s y k tora d z i e d z i c z y po k l a s i e f i g u r a j e s t dostepna8 int N; // l i c z b a wezlow9 private : // tua j nawet k l a s a k tora d z i e d z i c z y po k l a s i e f i g u r a nie ma

10 //wstepu i na c z e j11 // n i z poprzez metody z s e k c j i p u b l i c z n e j12 int Nbokow ; // l i c z b a bokow13 public :14 f i g u r a ( int n)�N=n ; Nbokow=n ;} // kons t ruk t o r15 ˜ f i g u r a ( )�} // d e s t r u k t o r1617 int LiczbaWezlow ( )� return N;} // zwraca l i c z b e wezlow f i g u r y1819 void PokazNaEkranieWartoscZmiennejNbokow ()�20 cout��”Liczab bokow Nbokow= ”��Nbokow��endl ; // pokazuje na ekran ie21 // l i c z b e bokow22 }232425 } ; //pamietamy o sredn iku2627 class PaletaKolorow� // t u t a j k l a s a zawiera t y l k o po la pub l i c z n e28 protected :2930 int ko lo r ; // dos tep t y l k o d la k l a s d z i e d z i c z a c y ch po k l a s i e31 //PaletaKolorow3233 public :34 void WpiszKolor ( )�3536 cout��”Wybierz liczbe calkowita sposrod Bialy (0), Czerwony (1), Niebieski (2).” ;

M�R� Dudek dla < OWK� > http://www�owk�if�uz�zgora�pl 45 Materiał dystrybuowany bezpłatnie

Page 2: 2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy Kolejny przykład pokazuje że korzystanie z dziedziczenia klas może powodować

2.4 Dziedziczenie Przykłady programowania w C�� - kurs podstawowy

37 cin>>ko lo r ; //zmienna ko l o r j e s t ju z zde f in iowana w k l a s i e PaletaKolorow3839 while ( ko lor�0 | | ko lo r >2)�40 cout��”Blad...Wybierz ponownie” ;41 cout��”liczbe calkowita sposrod Bialy (0), Czerwony (1), Niebieski (2).” ;42 cin>>ko lo r ; //zmienna ko l o r j e s t ju z zde f in iowana w k l a s i e PaletaKolorow4344 }45 }4647 void PodajJakiKolor ( )�48 cout��”Kolor kwadratu to kolor ”��kolor��endl ;49 }5051 } ; //pamietamy o sredn iku5253 class kwadrat : public f i gu ra , public PaletaKolorow� //po dwukropku oddz i e l one54 // przec inkami nazwy k l a s po k torych55 // k l a s a kwadrat d z i e d z i c z y , t u t a j po k l a s i e f i g u r a i56 //po k l a s i e PaletaKolorow57 // s lowo pu b l i c oznacza ze k l a s a kwadrat n ie ma dostepu58 //do prywatnych sk ladowych59 // k l a s f i g u r a i PaletaKolorow60 //Ma natomiast dos tep do po l typu p ro t e c t ed616263 public :6465 kwadrat ( int k ) : f i g u r a (k ) , PaletaKolorow ()�} // kons t ruk t o r k l a s y kwadrat66 //musi uwzg l edn ic kons t ruk to ry obu k l a s a l e67 // poniewaz w przypadku k l a s y PaletaKolorow68 // kons t ruk t o r j e s t domyslny to nie musimy go p i sac69 // i mozna by l oby zo s taw i c kwadrat ( i n t k ) : f i g u r a ( k )�}7071 void PokazNaEkranieWartoscZmiennejN ( )�72 cout��”Liczba wezlow N= ”��N��endl ; //mamy dos tep do po la N73 // z k l a s y f i g u r a74 }7576 } ;7778 int main ( )�79 kwadrat A( 4 ) ; //wartosc 4 b ed z i e oznacza 4 wez ly8081 A. WpiszKolor ( ) ; //wpisujemy ko l o r kwadratu poprzez metode z82 // k l a s y PaletaKolorow8384 A. PodajJakiKolor ( ) ; //metoda z k l a s y PaletaKolorow8586 A. PokazNaEkranieWartoscZmiennejN ( ) ; // t u t a j dos tep do po la p ro t e c t e d87 // j e s t mozliwy88 A. PokazNaEkranieWartoscZmiennejNbokow ( ) ; // t u t a j dos tep do po la p r i v a t e89 // t y l k o pr ze z90 //metode pub l i c zna z k l a s y f i g u r a91 return 0 ;92 }

M�R� Dudek dla < OWK� > http://www�owk�if�uz�zgora�pl 46 Materiał dystrybuowany bezpłatnie

Page 3: 2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy Kolejny przykład pokazuje że korzystanie z dziedziczenia klas może powodować

2.4 Dziedziczenie Przykłady programowania w C�� - kurs podstawowy

Kolejny przykład pokazuje że korzystanie z dziedziczenia klas może powodować różnegorodzaju błędy np. błędy jednoznaczności przy wywoływaniu metod. Komentarze w poniższymprogramie dziedziczenie konflikt.cc powinny pomóc zrozumieć te niuanse.

12 // pr zy k l ad z d z i ed z i c z en i em z dwoch k l a s bazowych3 // Bazowa1 i Bazowa24 //Przyk lad z kon f l i k t em przy uzyc iu t e j samej nazwy metody5 �include �iostream>6 �include �c s t d l i b>78 using namespace std ;9

10 //∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗11 //DEFINICJA KLASY Bazowa112 //∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗13 class Bazowa1�1415 protected : // po l e dostepne rowniez d l a metod z k l a s pochodnych16 char znak ;17 public :1819 double a ;20 Bazowa1 ( char ∗z )� znak=∗z ;}2122 void wypisz znak ( )� cout��”Bazowa1: ”��znak��endl ;}2324 } ; // nie zapominamy o sredn iku � � �25 //∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗26 //Koniec d e f i n i c j i d l a k l a s y Bazowa127 //∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗282930 class Bazowa2�3132 protected : // po l e dostepne rowniez d l a metod z k l a s pochodnych33 char znak ;34 public :3536 double a ;37 Bazowa2 (double aa )�38 a=aa ;39 znak=’x’ ;40 }4142 void wypisz znak ( )� cout��”Bazowa2: ”��znak��”“t”��a��endl ;}4344 } ;45 //∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗46 //Koniec d e f i n i c j i d l a k l a s y Bazowa247 //∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗4849 //∗∗∗∗∗∗∗∗∗∗∗∗∗50 //DEFINICJA KLASY Pochodna DZIEDZICZACEJ PO KLASIE Bazowa1 i Bazowa251 //∗∗∗∗∗∗∗∗∗∗∗∗∗∗5253 class Pochodna : public Bazowa1 , public Bazowa2�

M�R� Dudek dla < OWK� > http://www�owk�if�uz�zgora�pl 47 Materiał dystrybuowany bezpłatnie

Page 4: 2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy Kolejny przykład pokazuje że korzystanie z dziedziczenia klas może powodować

2.4 Dziedziczenie Przykłady programowania w C�� - kurs podstawowy

5455 private :56 int k ;57 double b ;58 char ZNAK;59 public :60 Pochodna ( char ∗z , double q ) : Bazowa1 ( z ) , Bazowa2 (q )�61 k=a t o i ( z ) ; //zamiana znaku na l i c z b e ca l k ow i t a62 ZNAK=∗z ;63 }6465 void Wypisz k ( )� //metoda66 cout��”znak ”��ZNAK��”“t”��k��endl ;67 }6869 } ; // s redn i k707172 int main ( )�7374 char ∗znak=new char ; // a l o kac j a dynamiczna zmiennej znak7576 ∗znak=’a’ ; // p r z yp i s an i e zmiennej znaku ’ a ’7778 Pochodna R( znak , 2 . 3 4 ) ; //powolujemy o b i e k t R;7980 R. Wypisz k ( ) ;8182 //R. wyp i s z znak ( ) ; // uruchamienie metody wyp i s z znak ( )83 // spowoduje komunikat b l edu848586 R. Bazowa1 : : wypisz znak ( ) ; // t u t a j podwojnym dwukropkiem87 //wskazujemy z j a k i e j k l a s y metoda88 R. Bazowa2 : : wypisz znak ( ) ;8990 //Podobnie b l ad powoduje proba wydruku war to sc i po la doub l e d l a91 // zmiennej a9293 // cout��R. a��end l ;9495 // t e r a z b ed z i e o . k .96 cout��R. Bazowa2 : : a��endl ;979899 return 0 ;

100 }

Konflikty wynikające z niejednoznaczności dostępu do składowych klasy nie są jedynym pro-blemem. Zauważmy, że przy dziedziczeniu wielobazowym będzie dochodzić do niepotrzebnegowielokrotnego włączania pól klasy bazowej do klasy pochodnej. Widać to np. z poniższego dia-gramu.

M�R� Dudek dla < OWK� > http://www�owk�if�uz�zgora�pl 48 Materiał dystrybuowany bezpłatnie

Page 5: 2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy Kolejny przykład pokazuje że korzystanie z dziedziczenia klas może powodować

2.4 Dziedziczenie Przykłady programowania w C�� - kurs podstawowy

�������������������

�������������

���������������������

�������������������������������������������������������

�������������

���������������

���������

������������������

�������������������

����������������������������������������������

�����������������

�������������������������������

�����������������������������������������������������������

Rysunek 9: Przykład wielokrotnego włączania pól klasy bazowej. Pole X zajmuje 8 bajtów,pole Y 8 bajtów. Podwójne dziedziczenie pola X przez klasę PochodnaPochodnych powoduje, żezajmuje ona pamięć 24 bajtów.

Przykładem dla tego schematu jest kod programu dziedziczWielokrot.cc gdzie do pokazaniapojemności klas użyta została funkcja systemowa sizeof(). Nazwy klas są jak na schemacie.Zauważmy że pojemność klasy określają pojemności zadeklarowanych zmiennych a nie metody.

1 �include �iostream>23 using namespace std ;45 class Bazowa1� // k l a s a bazowa 167 protected :8 double X;9 public :

10 Bazowa1 ( )�X=1.0;}11 double WartoscPolaX ()� return X;}

M�R� Dudek dla < OWK� > http://www�owk�if�uz�zgora�pl 49 Materiał dystrybuowany bezpłatnie

Page 6: 2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy Kolejny przykład pokazuje że korzystanie z dziedziczenia klas może powodować

2.4 Dziedziczenie Przykłady programowania w C�� - kurs podstawowy

12 } ;1314 class Bazowa2� // k l a s a bazowa 21516 protected :17 double Y;18 public :19 Bazowa2 ( )�Y=2.0;}20 double WartoscPolaY ()� return Y;}21 } ;2223 class Pochodna1 : public Bazowa1 , public Bazowa224 � // k l a s a Pochodna 1 d z i e d z i c z y po dwoch k l a sach Bazowa1 i Bazowa22526 public :27 double WartoscPolaX ()� return X;}28 double WartoscPolaY ()� return Y;}29 } ;3031 class Pochodna2 : public Bazowa132 � // k l a s a Pochodna 2 d z i e d z i c z y po k l a s i e Bazowa13334 public :35 double WartoscPolaX ()� return X;}36 } ;3738 class PochodnaPochodnych : public Pochodna1 , public Pochodna2�39 // doub le WartoscPolaX ()� re turn X;} //uwaga komentarz bo j e s t40 // k o n f l i k t j ednoznacznosc i41 // z k to rego po la odczy tac wartosc X42 double WartoscPolaY ()� return Y;} // t u t a j n ie ma kon f l u k t u4344 } ;4546 int main ( )�4748 Bazowa1 B1 ; // o b i e k t Bazowa1 ;49 Bazowa2 B2 ; // o b i e k t Bazowa25051 cout��”Obiekt B1 zajmuje ”��s izeof (Bazowa1)��” bajtow pamieci”��endl ;52 //metody nie zajmuja pamieci53 //− moze wiec byc i ch duzo54 cout��”Obiekt B2 zajmuje ”��s izeof (Bazowa2)��” bajtow pamieci”��endl ;5556 PochodnaPochodnych A; // o b i e k t A d z i e d z i c z y dwukrotnie po l e X57 // i raz po l e Y58 cout��”Obiekt A zajmuje ”��s izeof ( PochodnaPochodnych)��” bajtow pamieci”��endl ;596061 return 0 ;62 }

Aby uniknąć powtarzania włączania pól klasy bazowej do klas pochodnych wprowadzone zostałodziedziczenie wirtualne. Pola klasy wirtualnej są włączane do klasy pochodnej jeden raz - niema konfliktu. To że klasa dziedziczona jest wirtualnie zaznacza się słowem kluczowym virtual.Poniższy program pokazuje brak konfliktu w dostępie do tych samych składowych klasy jeśli

M�R� Dudek dla < OWK� > http://www�owk�if�uz�zgora�pl 50 Materiał dystrybuowany bezpłatnie

Page 7: 2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy Kolejny przykład pokazuje że korzystanie z dziedziczenia klas może powodować

2.4 Dziedziczenie Przykłady programowania w C�� - kurs podstawowy

klasa po której się dziedziczy jest włączana jako klasa wirtualna.

1 �include �iostream>23 using namespace std ;45 class Bazowa1� // k l a s a bazowa 167 protected :8 double X;9 public :

10 Bazowa1 ( )�X=1.0;}11 double WartoscPolaX ()� return X;}12 } ;1314 class Bazowa2� // k l a s a bazowa 21516 protected :17 double Y;18 public :19 Bazowa2 ( )�Y=2.0;}20 double WartoscPolaY ()� return Y;}21 } ;2223 class Pochodna1 : virtual public Bazowa1 , public Bazowa224 � // k l a s a Pochodna 1 d z i e d z i c z y po dwoch k l a sach Bazowa1 i Bazowa225 // t u t a j dos tep do k l a s y Bazowa1 jako do k l a s y w i r t u a l n e j − pojawia26 // s i e s lowo k luczowe v i r t u a l2728 public :29 double WartoscPolaX ()� return X;}30 double WartoscPolaY ()� return Y;}31 } ;3233 class Pochodna2 : virtual public Bazowa134 � // k l a s a Pochodna 2 d z i e d z i c z y po k l a s i e Bazowa135 // t u t a j dos tep do k l a s y Bazowa1 jako do k l a s y w i r t u a l n e j363738 public :39 double WartoscPolaX ()� return X;}40 } ;4142 class PochodnaPochodnych : public Pochodna1 , public Pochodna2�43 double WartoscPolaX ()� return X;} //uwaga NIE MA k on f l i k t u44 // jednoznacznosc i45 // z k to rego po la odczy tac wartosc X46 double WartoscPolaY ()� return Y;} // t u t a j n ie ma kon f l u k t u4748 } ;4950 int main ( )�515253 Bazowa1 B1 ; // o b i e k t Bazowa1 ;54 Bazowa2 B2 ; // o b i e k t Bazowa255

M�R� Dudek dla < OWK� > http://www�owk�if�uz�zgora�pl 51 Materiał dystrybuowany bezpłatnie

Page 8: 2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy Kolejny przykład pokazuje że korzystanie z dziedziczenia klas może powodować

2.4 Dziedziczenie Przykłady programowania w C�� - kurs podstawowy

56 cout��”Obiekt B1 zajmuje ”��s izeof (Bazowa1)��” bajtow pamieci”��endl ;57 //metody nie zajmuja pamieci58 //− moze wiec byc i ch duzo59 cout��”Obiekt B2 zajmuje ”��s izeof (Bazowa2)��” bajtow pamieci”��endl ;6061 PochodnaPochodnych A; // o b i e k t A d z i e d z i c z y dwukrotnie po l e X62 // i raz po l e Y a l e nie ma k o n f l i k t u z63 //uzyciem metody WartoscPolaX ()64 cout��”Obiekt A zajmuje ”��s izeof ( PochodnaPochodnych)��” bajtow pamieci”��endl ;656667 return 0 ;68 }

Na zakończenie tego rozdziału podamy jeszcze jeden przykład ale tym razem z funkcjamiwirtualnymi. Funkcje wirtualne muszą być tego samego typu i mięć tą samą liczbe i typ ar-gumentów. Klasa w której jest co najmniej jedna funkcja wirtualna jest klasą abstrakcyjną.Dla klasy abstrakcyjnej nie można tworzyć obiektów. Poniżej jest przykład programu z klasąabstrakcyjną.

1 �include �iostream>23 using namespace std ;45 //6 // Class name : Klasa Zwierz j e s t k l a s a ab s t rakcy jna7 // to znaczy ze nie mozna tworzyc ob iek tow8 // t e j k la sy , wprowadza s i e ja po to aby de f in iowac9 // wspolne metody d la k l a s pochodnych

10 // Descr ip t i on :11 //12 class Zwierz �13 public :14 virtual void DajGlos ()=0; // oznacza to ze nie i s t n i e j e15 // t r e s c metody w k l a s i e bazowej Zwierz16 } ;171819 //20 // Class name : Kot21 //22 // Descr ip t i on : d z i e d z i c z y po k l a s i e Zwierz23 //24 class Kot : public Zwierz �25 public :2627 void DajGlos ( )�28 cout��”Miau....”��endl ;29 }30 } ;313233 //34 // Class name : Pies35 //36 // Descr ip t i on : d z i e d z i c z y po k l a s i e Zwierz37 //

M�R� Dudek dla < OWK� > http://www�owk�if�uz�zgora�pl 52 Materiał dystrybuowany bezpłatnie

Page 9: 2.4 Dziedziczeniemdudek/lab2_cz2.pdf · 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy Kolejny przykład pokazuje że korzystanie z dziedziczenia klas może powodować

2.4 Dziedziczenie Przykłady programowania w C�� - kurs podstawowy

38 class Pies : public Zwierz �39 public :4041 void DajGlos ( )�42 cout��”Hau, hau....”��endl ;43 }44 } ;454647 //48 // Class name : Pchla49 //50 // Descr ip t i on : d z i e d z i c z y po k l a s i e Zwierz51 //52 class Pchla : public Kot , public Pies �53 public :5455 void DajGlos ( )�56 cout��”bez, bez....”��endl ;57 }58 } ;5960 int main ( )�6162 Kot Mruczek ;63 Mruczek . DajGlos ( ) ;6465 Pies Latek ;66 Latek . DajGlos ( ) ;6768 Pchla Cyrkowka ;69 Cyrkowka . DajGlos ( ) ;7071 return 0 ;72 }

M�R� Dudek dla < OWK� > http://www�owk�if�uz�zgora�pl 53 Materiał dystrybuowany bezpłatnie