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

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

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

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

Programowanie Obiektowe i C++

TEMAT : KLASY DZIEDZICZENIE

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 w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

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

PARADYGMATY PROGRAMOWANIA Wykład 3

Mechanizm dziedziczenia

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

Wprowadzenie do programowanie obiektowego w języku C++

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.

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

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

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

Przeciążenie operatorów

Dziedziczenie. Ogólna postać dziedziczenia klas:

PARADYGMATY PROGRAMOWANIA Wykład 4

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

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

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

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

Plik klasy. h deklaracje klas

Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie:

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

dr inż. Jarosław Forenc

Materiały do zajęć VII

Wykład 8: klasy cz. 4

Mechanizm dziedziczenia

Dziedziczenie jednobazowe, poliformizm

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

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

Abstrakcyjny typ danych

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie obiektowe w języku

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

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

Konstruktor kopiujacy

Wykład 5: Klasy cz. 3

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 12

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

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

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

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

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

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

Zaawansowane programowanie w C++ (PCP)

Wyliczanie wyrażenia obiekty tymczasowe

Przeciążanie operatorów

Programowanie, część I

Wstęp do Programowania 2

Programowanie, część I

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

Podstawy Programowania Obiektowego

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

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

Wykład :37 PP2_W9

Szablony funkcji i szablony klas

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

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

Algorytmy i Struktury Danych. Anna Paszyńska

Klasy abstrakcyjne i interfejsy

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

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

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

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

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe w C++ Wykład 12

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

Programowanie w języku C++

C++ - [4-7] Polimorfizm

Programowanie w języku C++

Język C++ zajęcia nr 2

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

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Operatory na rzecz typu TString

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

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie obiektowe

Wstęp do Programowania 2

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Podstawy Programowania Obiektowego

Programowanie obiektowe w C++ Wykład 03 Temat wiodący: Konstruktory i deskruktory. Konstruktory i Destruktory

Język C++ Programowanie obiektowe

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Wstęp do programowania obiektowego, wykład 7

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)

tel Konsultacje www

Transkrypt:

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B

Plan prezentacji Przeciążanie operatorów Funkcje zaprzyjaźnione Na podstawie: A. Allain, Przewodnik dla początkujących C++ S. Prata, Szkoła programowania C++

Przeciążanie operatorów Przeciążaniu mogą podlegać nie tylko funkcje, ale także operatory. Aby przeciążyć operator należy zdefiniować specjalną funkcję funkcję operatora: operatorop(lista-parametrów) Nie można wymyślać nowych operatorów.

Przeciążanie operatorów Przykład Załóżmy, że: dysponujemy klasą Salesperson dla klasy Salesperson przeciążono operator dodawania, w sposób umożliwiający sumowanie wartości sprzedaży dwóch sprzedawców w programie mamy obiekty district2, sid, sara wszytkie klasy Salesperson Wtedy poprawna będzie instrukcja distric2 = sid + sara;

Przeciążanie operatorów Przykład Wtedy poprawna będzie instrukcja distric2 = sid + sara; Kompilator zastąpi standardowy operator odpowiednią funkcją: distric2 = sid.operator+(sara);

Przeciążanie operatorów Przykład 2 Rozważmy klasę Time

Przeciążanie operatorów Przykład 2 konstruktory

Przeciążanie operatorów Przykład 2 dodawanie godzin i minut do czasu resetowanie czasu

Przeciążanie operatorów Przykład 2 dodawanie czasów wyświetlanie czasu

Przeciążanie operatorów Przykład 2

Przeciążanie operatorów Przykład 2

Przeciążanie operatorów Przykład 3 Metoda Sum() zastąpiona funkcją operatorową

Przeciążanie operatorów Przykład 3 Metoda Sum() zastąpiona funkcją operatorową

Przeciążanie operatorów Przykład 3 Wywołanie

Przeciążanie operatorów Ograniczenie Przeciążony operator musi przyjmować przynajmniej jeden operand typu własnego Nie można korzystać z operatora w sposób naruszający jego składnię (np. zmieniać liczbę operandów) Nie można definiować własnych operatorów Nie wszystkie operatory można przeciążać

Przeciążanie operatorów Przykład 4

Przeciążanie operatorów Przykład 4

Przeciążanie operatorów Przykład 4

Przeciążanie operatorów Wywołanie adjusted = total * 1.5; jest prawidłowe, ale adjusted = 1.5 * total; nie zadziała

Funkcje zaprzyjaźnione Funkcja zaprzyjaźniona nie jest metodą klasy, ale ma uprawnienia zrównujące ją z metodami klasy.

Funkcje zaprzyjaźnione w deklaracji klasy friend Time operator*(double m, const Time& t); definicja funkcji Time operator*(double m, const Time& t){ } Time result; long totalminutes = t._hours*m*60 + t._minutes*m; result._minutes = totalminutes%60; result._hours return result; = totalminutes/60;

Funkcje zaprzyjaźnione możliwa jest inna definicja funkcji Time operator*(double m, const Time& t){ } return t * m; tak zdefiniowana funkcja nie wymagałaby zaprzyjaźniania

Funkcje zaprzyjaźnione przeciążony operator<< do wypisywania void operator<<(ostream& out, const Time& t){ } out << t._hours << " godzin, "; out << t._minutes << " minut"; wykorzystując ten operator możemy zapisać cout << total;

Funkcje zaprzyjaźnione przeciążony operator<< do wypisywania ostream& operator<<(ostream& out, const Time& t){ } out << t._hours << " godzin, "; out << t._minutes << " minut"; return out; wykorzystując ten operator możemy zapisać cout << "czas razem" << total << endl;

Funkcje zaprzyjaźnione zasadniczo przeciążony operator<< ma postać ostream& operator<<(ostream& out, const klasa& obj){ } return out <<... ; //wyświetlenie obiektu

pozwala dodawać nowe możliwości (nowe metody) do istniejącej klasy pozwala dodawać nowe dane do klasy pozwala zmieniać działanie metod klasy

Prosta klasa bazowa: przechowuje imię i nazwisko oraz informację o tym, czy gracz ma stół pingpongowy

Klasa pochodna: dodatkowa informacja o punktach rankingowych class RatedPlayer : public TableTennisPlayer {... }; Obiekt klasy pochodnej zawiera w sobie dane składowe typu bazowego. Klasa pochodna dziedziczy implementację klasy bazowej.

Klasa pochodna potrzebuje własnego konstruktora. W klasie pochodnej można dodać nowe pola i metody.

Klasa pochodna nie ma dostępu do prywatnych składowych klasy bazowej, do ich inicjalizacji należy wykorzystać listę inicjalizacyjną

Wskaźniki klasy bazowej mogą pokazywać obiekty klasy pochodnej. Referencja klasy bazowej może odnosić się do obiektu klasy pochodnej.

W konsekwencji funkcje pobierające jako argument referencję do klasy bazowej działają także dla obiektów klasy pochodnej.

RatedPlayer rplayer(1140, "Maciej", "Kaczkowski", true); TableTennisPlayer player("teresa", "Bogatko", false); Show(player); Show(rplayer);

Podobnie można inicjalizować obiekty klasy bazowej za pomocą obiektu klasy pochodnej

Rachunek bankowy imię i nazwisko klienta, numer rachunku, saldo. Operacje na rachunku: tworzenie rachunku, wpłata, wypłata, wyświetlenie.

Rachunek bankowy rozszerzony o: limit debetu, stopa procentowa, zadłużenie. Operacje na rachunku: wypłata (obsługuje powstanie debetu), wyświetlenie (w tym dodatkowych informacji).

W obu klasach zadeklarowano metody withdraw(), viewaccount() Nowe słowo kluczowe virtual W klasie Account jest zadeklarowany także destruktor wirtualny

Konstruktory klasy pochodnej używają list inicjalizacyjnych Metoda AccountPlus::viewAccount() wywołuje metodę Account::viewAccount() Metoda AccountPlus::withdraw wywołuje, w zależności od sytuacji, różne metody

Account * p_clients[clients];... for(int i=0; i < CLIENTS; i++){ p_clients[i]->viewaccount(); cout << endl; } for(int i=0; i < CLIENTS; i++){ delete p_clients[i]; }

class Account{ protected: double balance;... };

Abstrakcyjna klasa bazowa AccountABC

Podsumowanie Przeciążanie operatorów Funkcje zaprzyjaźnione