Jzyk C++ cz 5 dziedziczenie. Jarosław Gramacki Instytut Informatyki i Elektroniki & ' ( ) * #% +% %, %-##. %-*+ + +# ) + #### # '/01,%*1 %



Podobne dokumenty
PARADYGMATY PROGRAMOWANIA Wykład 4

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

dr inż. Jarosław Forenc

!!" % & $ ( # # ( ( # ( ( TalentowiSKO talenty dodajemy, mnoīymy, potċgujemy. TalentowiSKO@bankbps.pl tel TalentowiSKO.

Programowanie 2. Język C++. Wykład 3.

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Wprowadzenie do programowanie obiektowego w języku C++

Szablony funkcji i szablony klas

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Abstrakcyjny typ danych

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie obiektowe w języku

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Programowanie obiektowe w C++ Wykład 12

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Programowanie obiektowe Wykład 7. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Podstawy Programowania Obiektowego

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

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

PARADYGMATY PROGRAMOWANIA Wykład 3

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Programowanie 2. Język C++. Wykład 9.

Dziedziczenie. Ogólna postać dziedziczenia klas:

Informatyka II Laboratorium 3 : Programowania obiektowe C++ - dziedziczenie

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza)

Mechanizm dziedziczenia

Programowanie 2. Język C++. Wykład 2.

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Programowanie Obiektowe i C++

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Podstawy Programowania Obiektowego

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe Wykład 1. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Konstruktor kopiujacy

DYNAMICZNE PRZYDZIELANIE PAMIECI

Programowanie Obiektowew języku C++ Zadania L4

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

Wprowadzenie do szablonów szablony funkcji

Zaawansowane programowanie w języku C++ Klasy w C++

Wprowadzenie do szablonów szablony funkcji

Qt sygnały i designer

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Dziedziczenie & W slajdach są materiały zapożyczone z

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Polimorfizm, metody wirtualne i klasy abstrakcyjne

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

C++ - [4-7] Polimorfizm

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

TEMAT : KLASY DZIEDZICZENIE

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. Metody stałe w klasie

Szablony. Szablony funkcji

Programowanie obiektowe

Mechanizm dziedziczenia

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

TEMAT : KLASY POLIMORFIZM

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Plik klasy. h deklaracje klas

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Dziedziczenie. Literatura:

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

Obiekty i metody stałe

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. Metody stałe w klasie

Zaawansowane programowanie w C++ (PCP)

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

Składnia C++ Programowanie Obiektowe, część 3 Mateusz Cicheński

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Programowanie komputerowe. Zajęcia 7

Techniki Programowania wskaźniki 2

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Dziedziczenie i poliformizm

Rzutowanie i konwersje

Programowanie obiektowe

tel Konsultacje www

Programowanie Obiektowew języku C++ Zadania L9

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm

Podstawy Programowania Obiektowego

Transkrypt:

Jzyk C++ cz 5 dziedziczenie Jarosław Gramacki Instytut Informatyki i Elektroniki " ###$ % #% & ' ( ) * #% +% %, %-##. %-*+ + +# ) + #### # '/01,%*1 % ##.-'# 2 % + -+#+( ) ###%# #3/ 0 %+!% 0' '// * #! ) %+ ####..'' * #'%! ) '/% 4* %+'#%. * #' ) # %+'# %-* * #'! 2

" ###$%# -%#*'%, # #/# '/% 5 ##,-( 6%, # % 0 3 #nazwisko!% %'biuro! -% %#* 7 % %'% '.3% * # +%'4*38# # 9#%,! : 5# ## '% -% +-%-*( ; % '/ 6% % %'!- 0#*%#% + /,#godziny! #,# stawka! <%# 6% - 0 '%'#'' # #*,#) ' %#;!= #% %procent!# # ' /%# sprzedaz! >#6% - 0 '%'pensja!=% premia!# #* %,+% -ile_pracowników!,(%' % > ' #,-#,# %-' %#% ; -<%# - # +'! 3 " ###$#/# # ) 7 0%+ +%#,%, # '/( %# / 0#% #/0#+ % -#% nazwisko biuro## '%# '/ 3# #.).3 '% # 3',?%# / 0###//% # '// % '%% % '/, @%# /'0!-'# 0#% +'! 4

" ###$#/# # class ( const char* _nazwisko, short _biuro = 0 ); ~() delete [] nazwisko; void print() const; void set_biuro( short _biuro ) biuro = _biuro; const char* get_telefon() const; private: char* nazwisko; short biuro; ; %- ',# A #/' ::( const char* _nazwisko, short _biuro) : biuro( _biuro ) nazwisko = new char [ strlen( _nazwisko) + 1 ]; strcpy( nazwisko, _nazwisko ); lista inicjalizacyjna nie jest ograniczona jedynie do pól const (patrz poprzedni wykład)! 5 " ###$#/# # void ::print() const cout << " " << nazwisko << " :" << endl; cout << "biuro = " << biuro << ", " << "tel. = " << get_telefon() << endl; const char* ::get_telefon() const static const char* tel[] = "0000", "1111", "2222", "3333", "4444"; // symulacja uzyskiwania numeru telefonu return tel[ biuro ];! 6

" ###$#/# # % ' ###%*# '#0.'!>###% +'B0# %-C' class : public ( const char* _nazwisko, int _biuro = 0, float _stawka = 0.0, float _godziny = 0.0 ); void print() const; void set_stawka( float _stawka ) stawka = _stawka; void set_godziny( float _godziny ) godziny = _godziny; float oblicz_place() const; private: float stawka; float godziny; ;! 7 " ###$#/# # ::( const char* _nazwisko, int _biuro, float _stawka, float _godziny ) : ( _nazwisko, _biuro ), stawka( _stawka ), godziny( _godziny ) # #! ' void ::print() const ' % ' # #0' ::print(); cout << "Stawka godzinowa = " << stawka << ", " << "Liczba przepracowanych godzin = " << godziny << endl; float ::oblicz_place() const return stawka * godziny;! 8

" ###$#/# # void main() p1( "Kowalski", 2 ); p1.print(); p1.set_biuro( 5 ); p1.print(); // ::print() // ::set_biuro() // ::print() e1( "Malinowski", 3, 70.0, 169.0 ); e1.print(); // ::print() e1.set_biuro( 4 ); // ::set_biuro() // 3 -> 4 e1.set_stawka( 75.0 ); // ::set_stawka() // 70.0 -> 75.0 e1.print(); // ::print()! 9 " ###$ # #/# ) '/ % stawka, godziny! set_stawka(), set_godziny(), oblicz_place()!#% % %% % % ' * ) print() # 0%'0print()# ) # ::print() # # ::print()! 10

" ###$ # #/# ) * %+' 0%#+-%*#+ '' * #'#,*0/# #'%! e1( "Kowalski", 3, 70.0, 169.0 ); e1.print(); // ::print() e1.set_biuro( 4 ); // ::set_biuro() ) %+ # 3#-% + '' * #' &1# 301#./'%*#'#'D! void ::print() const // ::print(); tak jest teraz... // a tak bdzie le... // BLAD: ::nazwisko jest w sekcji private cout << "" << nazwisko << " :",, endl;! 11 " ###$ # #/# ) # ::print(),print() %'# %00 %, E% # ::'0#*0 F ' # +#, %+ ' 0# * #' void ::print() const ::print(); // OK print(); // BLAD, wywołujemy ::print();! 12

" ###$ # #/# ) '. * # ' # 3 # # * %+'%% # ' #'/0 -*###! ) 0# %+'.3 * #'%# #'/ %! ::( const char* _nazwisko, int _biuro, float _stawka, float _godziny ) : ( _nazwisko, _biuro ), stawka( _stawka ), godziny( _godziny ) * #' ' # ' # *! B#, # '!. * #'D ' # ' % # A! ' # ' %# +%-! 13 " %# %# class : public ( const char* _nazwisko, short _biuro = 0, float _pensja = 0.0, float _premia = 0.0, int _ile_pracownikow = 0); void print() const; void set_pensja( float _pensja ) pensja = _pensja; void set_premia( float _premia ) premia = _premia; void set_ile_pracownikow( int _ile_pracownikow ) ile_pracownikow = _ile_pracownikow; float oblicz_place() const; private: float pensja; float premia; int ile_pracownikow; ; :: ( const char* _nazwisko, short _biuro, float _pensja, float _premia, int _ile_pracownikow ) : ( _nazwisko, _biuro ), pensja( _pensja ), premia( _premia ), ile_pracownikow( _ile_pracownikow )! 14

" %# %# void ::print() const ::print(); cout << "pensja = " << pensja << ", " << "premia = " << premia << endl; cout << "Liczba nadzorowanych pracownikow = " << ile_pracownikow << endl; float ::oblicz_place() const return pensja + premia;! 15 " %# %# class : public ( const char* _nazwisko, short _biuro = 0, float _stawka = 0.0, float _godziny = 0.0, float _procent = 0.0, float _sprzedaz = 0.0 ); void print() const; void set_procent( float _procent ) procent = _procent; void set_sprzedaz( float _sprzedaz ) sprzedaz = _sprzedaz; float oblicz_place() const; private: float procent; float sprzedaz; ; ::( const char* _nazwisko, short _biuro, float _stawka, float _godziny, float _procent, float _sprzedaz ) : ( _nazwisko, _biuro, _stawka, _godziny ), procent( _procent ), sprzedaz( _sprzedaz ) void ::print() const ::print(); cout << "procent = " << procent << ", " << "od sprzedazy = " << sprzedaz << endl; float ::oblicz_place() const return ::oblicz_place() + procent * sprzedaz;! 16

" %,,- void main() s1( "Kowalski" ); <%# *#%.0% '::set_biuro() set_biuro() # %# s1.set_biuro( 1 ); // ::set_biuro() s1.set_stawka( 90.0 ); // ::set_stawka() s1.set_godziny( 169.0 ); // ::set_godziny() s1.set_procent(.05 ); // ::set_procent() s1.set_sprzedaz( 10000.0 ); // ::set_sprzedaz() s1.print(); // ::print() cout << "Placa = " << s1.oblicz_place() << endl; d1( "Malinowski" ); d1.set_biuro( 2 ); // ::set_biuro() d1.set_pensja( 15000.0 ); // ::set_pensja() d1.set_premia( 1500.0 ); // ::set_premia() d1.set_ile_pracownikow( 25 ); // ::set_ile_pracownikow() d1.print(); // ::print() cout << "Placa = " << d1.oblicz_place() << endl;! 17 " ###$ * #, %! 18

" ' *-+ + ) % %##,-+ ( - nazwisko, biuro - nazwisko, biuro, stawka, godziny ) '/*#%.,0%%-% + -###/# ) *%% ' %#+'% 0 ) 03%-*'*% *% (' * %+' * * #'! void main() p1 ( "Malinowski" ); e1 ( "Kowalski", 2, 75.0, 169.0 ); e1.print(); p1 = e1; // OK : Konwersja ->. p1.print(); // to samo osigniemy gdy napiszemy: e1.::print(); 6# %, ( Kowalski Biuro = 2, tel. = 2222 Stawka godzinowa = 75, Liczba przepr. godzin = 169 % Kowalski Biuro = 2, tel. = 2222! 19 " ' *-+ + ) % %##,-+ ( - nazwisko, biuro - nazwisko, biuro, stawka, godziny ) ' %, % %-*p1 %+%-*e1 ) 0' /'0* %+' * * #' ) # '!' %# 0' void main() e1( "Kowalski", 2, 75.0, 169.0 ); p1( "Malinowski" ); e1.print(); p1 = e1; // OK : Konwersja ->. e1 = p1; // BLAD : Konwersja -> jest niemoliwa p1.print(); 2' * # $$G %+ %# *%% ' 3 +%- + %+'! 20 %

" ' C-*-+ + ) %*,/ ' %#' C- *- ) C* %+'%, #'' C * * #' ) *0 '/7#. ' #- '' void main() s( "Wincenty", 2, 75.0, 169.0, 0.05, 10000 ); * ptr_s = &s; * ptr_e = ptr_s; // OK : konwersja (*) -> (*) * ptr_p = ptr_s; // OK : konwersja (*) -> (*) ptr_s->set_biuro( 3 ); // OK : ::set_biuro() ptr_e->set_biuro( 4 ); // OK : ::set_biuro() ptr_p->set_biuro( 5 ); // OK : ::set_biuro() %H% %H ptr_s->set_stawka( 85.0 ); // OK : ::set_stawka() ptr_e->set_stawka( 95.0 ); // OK : ::set_stawka() ptr_p->set_stawka( 98.0 ); // BLAD: nie istnieje ::set_stawka() %H ptr_s->set_sprzedaz( 15000 ); // OK : ::set_sprzedaz() ptr_e->set_sprzedaz( 20000 ); // BLAD: nie istnieje ::set_sprzedaz() ptr_p->set_sprzedaz( 30000 ); // BLAD: nie istnieje ::set_sprzedaz()! 21 " ' C-*-+ + ) ',/0' C * * #' #0'! C* %+'!, ',% %, ' 7' #! void main() s( "Wincenty", 2, 75.0, 169.0, 0.05, 1000 ); * ptr_e = &s; // OK : konwersja (*) -> (*) p( "Jan", 3, 70.0, 169.0); * ptr_s = &p; // BLAD: nie jest wykonywana automatyczna konwersja (*)->(*) ptr_s -> sprzedaz = 2000; // BLAD: ptr_s wskazuje na p, ktory nie zawiera pola "sprzedaz" ptr_s = (*) ptr_e; // OK: jawna konwersja ptr_s -> sprzedaz = 2000; // OK %H! 22 %H

" '!% ) '% * public private6### '- protected ) % # 'protected # +'/0' % % ' '%+'!#'/0%+ %-' **%*# ) +# / %#'- %+'#* +'*0/ ' # %#' C# / ) /, I protected%# * % '* %, #0#, '%++ ) 3protected I J #' + /+% 0+ + %++! 23 " '!% ) (+ % ' # private. ;# # *#%# %0# public private )?+* '#!(% ' * #'#3#* # %+-*#%.# '/#''%-protected! 24

" '!% class Bazowa void f(); int publ; protected: int prot; private: int priv; ; void Bazowa::f() publ = 1; // OK : komponent publiczny prot = 2; // OK : f() to funkcja skladowa klasy Bazowa priv = 3; // OK : f() to funkcja skladowa klasy Bazowa class Pochodna : public Bazowa void g(); ; void Pochodna::g() publ = 1; // OK : komponent publiczny prot = 2; // OK : dozwolony dostep do komponentu protected priv = 3; // BLAD: niedozwolony dostep do komponentu private. E20%%##'0 * #' E20%%##'0 %+' void main() Bazowa b; b.publ = 1; // OK : komponent publiczny b.prot = 2; // BLAD: niedozwolony dostep do komponentu protected poprzez obiekt typu Bazowa b.priv = 3; // BLAD: niedozwolony dostep do komponentu private. Pochodna d; B/0%*#%.# %##'0 * #'* %+' d.publ = 1; // OK : komponent publiczny d.prot = 2; // BLAD: niedozwolony dostep do komponentu protected poprzez obiekt typu Pochodna d.priv = 3; // BLAD: niedozwolony dostep do komponentu private.! 25 " ####, #! 26

" ###% %! ) '% '/+ #### ##. public %# # * #' ) ###' '#0.'! ) ###public #%public protected * #' /0% '' %+' %private / ) '/%#%, # + + +!' %% # 0% '#! class Bazowa void f(); int a, b; private: float c, d; ; class Pochodna : public Bazowa void g(); ; void main() Pochodna d; d.a = 1; d.b = 2; d.f(); Bazowa Pochodna public 2%%*# Bazowa%# '/%*# Pochodna ;, #0#% *#%.%# # 3# %. *#,% 0 Pochodna // dostp do elementów publicznych klasy bazowej! 27 " ###% %! ) ###private0% %K# *#%# ) ###private%# %#'' 30%.3%- * #'#%# %+' ) ###private #% * #'# +'/0 ' %private %+' ) % * #'/00%/## %/' + %+'*#%.0%'0$ +#! class Bazowa void f1(); void f2(); int a, b; private: float c, d; ; Bazowa Pochodna private class Pochodna : private Bazowa Bazowa::f1(); // jawna autoryzacja dostpu do wybranych Bazowa::a; // komponentów klasy Bazowa (robimy to w sekcji public!) ; void main() Pochodna d; d.a = 1; // OK d.b = 2; // BŁAD d.f1(); // OK d.f2(); // BŁD B *#%.,0% %- * #' & 0# # 30% * +%- * #'! 28

" ###+%! ) ###protected#%public protected * #'# +'/0' %protected %+'/ 0% %, #0#,! ) % #' %+'#'/ 0%# - '' +' ' + class Pochodna : protected Bazowa... Bazowa Pochodna protected #'( %, #0#4* # ' %+' '/0%'''' L#'' #0#*0III! 29 " ###+%! ) ### private class Pochodna : Bazowa // UWAGA! domylnie bdzie dziedziczenie private... ; void main() Pochodna d; d.a = 1; // BŁAD d.b = 2; // BŁAD j.w d.f1(); // BŁAD j.w. d.f2(); // BŁD j.w. %'' %#public *0# 'D!private próba dostpu do komponentu private! 30

" '###public, private, protected, # K# ) %- ' ## 'C,%0# #.' #, ( ) ' $ '% %*% ) %*### $% %*% ) ' #'%#% D! 31 " ### ) # '# ###/'+ ) + $# #/# %./% -+ #! $ #'%' #%0#.%# + #! ) *%Handlowy 0%%-%*#+! Handlowy! 32

" ### class Handlowy : public, public Handlowy( const char* _nazwisko ); //... ewentualnie pozostale funkcje ; Handlowy::Handlowy( const char* _nazwisko ) : ( _nazwisko ), ( _nazwisko ) void main() Handlowy jk( "Jan Kowalski" ); Handlowy jk.set_pensja( 15000.0 ); // ::set_pensja() jk.set_premia( 2000.0 ); // ::set_premia() jk.set_ile_pracownikow( 5 ); // ::set_ile_pracownikow() jk.set_procent( 0.001 ); // ::set_procent() jk.set_sprzedaz( 500000.0 ); // ::set_sprzedaz()! 33 " ###%* ) ###'' % *0 ) ' #%./ * #/ Handlowy ) *%Handlowy % 0 %%- /+ void main() Handlowy jk( "Jan Kowalski" ); jk.set_pensja( 15000.0 ); jk.set_premia( 2000.0 ); jk.set_ile_pracownikow( 5 ); jk.set_procent( 0.001 ); jk.set_sprzedaz( 500000.0 ); // ::set_pensja() // ::set_premia() // ::set_ile_pracownikow() // ::set_procent() // ::set_sprzedaz() jk.set_biuro( 2 ); // BLAD : instrukcja niejednoznaczna cout << jk.get_telefon() << endl; // BLAD : instrukcja niejednoznaczna jk.::set_biuro( 2 ); // OK. cout << jk.::get_telefon() << endl; // OK. jk.print(); // BLAD: ::print() czy ::print()? % # +3'*/%'. #+ '*jk '#0. '#.,#* ::print() #::print()! 34

" ###%* ) %*%#' ) %# #%''' %+' * #' * pp = &jk; // BLAD : instrukcja niejednoznaczna // wskazujemy dan gał dziedziczenia * pp = (*) &jk ; 7 -/#%%- ; # 3 C%%I Handlowy! 35 " ###$ * # ) *%Handlowy% # %-###+# # *!7'#.#,# ##./ ) virtual%## %++*#%. /,.3 ) virtual %# % %- -',! ) ''# #% # #.'/ #E2 class : public virtual... ; class : public virtual... ; virtual %#+ % #+# Handlowy! 36

" ###$ * # ) %#### ##+ % ' 3 '' ' * #','''*#%.%! class : public virtual... ; class : public virtual... ; class Handlowy : public, public Handlowy( const char* _nazwisko ); void print() const ; ::print(); ::print();... Handlowy 6 Handlowy::print() %'. '%+#/+# ::print(). M*#3 *# 3# 'print() '+ +!!! Handlowy::Handlowy( const char* _nazwisko ) : ( _nazwisko ), ( _nazwisko ), ( _nazwisko ),*%%#! 37 " ###, ) ###'% *0 ), %', 3%#% +###,'#! ) %'/ 0Handlowy ''%#%3# ###3!,%'/,# %' % %# '.%#! 38