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

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

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

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

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

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

Programowanie obiektowe

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

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

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

TEMAT : KLASY DZIEDZICZENIE

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

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

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.

Wykład 8: klasy cz. 4

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

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

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.

Podstawy Programowania Obiektowego

Programowanie obiektowe w C++ Wykład 12

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

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

Programowanie komputerowe. Zajęcia 7

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

Programowanie Obiektowe i C++

C++ - [4-7] Polimorfizm

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

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

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

Abstrakcyjny typ danych

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

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

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

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

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

Programowanie Obiektowew języku C++ Zadania L4

Programowanie obiektowe w języku

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

Programowanie, część I

Wprowadzenie do programowanie obiektowego w języku C++

dr inż. Jarosław Forenc

Język C++ wykład VIII

Programowanie, część I

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

TEMAT : KLASY POLIMORFIZM

Dziedziczenie. Ogólna postać dziedziczenia klas:

Podstawy Programowania Obiektowego

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Programowanie Obiektowew języku C++ Zadania L4

Programowanie Obiektowe i C++

Wstęp do Programowania 2

Wyliczanie wyrażenia obiekty tymczasowe

Plik klasy. h deklaracje klas

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

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

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Wykład 5: Klasy cz. 3

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Język C++ Różnice między C a C++

Programowanie obiektowe język C++

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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

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

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

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

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

Język C++ zajęcia nr 2

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

Podstawy Programowania Obiektowego

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

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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

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

Programowanie Obiektowew języku C++ Zadania L9

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

Wstęp do programowania. Dariusz Wardecki, wyk. X

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

Wykład :37 PP2_W9

Projektowanie obiektowe. Roman Simiński Polimorfizm

Informacja o programowaniu w c++ Dr Maciej Bobrowski

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

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

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

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

Programowanie obiektowe i zdarzeniowe

PARADYGMATY PROGRAMOWANIA Wykład 3

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Transkrypt:

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

Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów lub wszystkie jego argumenty sa domyślne. K.Grzelak (Wykład 14) Programowanie w C++ 2 / 27

Na ostatnim wykładzie: Lista inicjalizacyjna służy m.in. do inicjalizowania obiektów const i obiektów innej klasy, które sa danymi składowymi klasy. class F{ public: F(int liczba); private: double x; double y; const int k; G element; ; F::F(int liczba):x(0),y(0),k(100),element(liczba,ćzerwony"){ K.Grzelak (Wykład 14) Programowanie w C++ 3 / 27

Z ostatniego wykładu: co się wypisze na ekranie? class Punkt{ public: Punkt(double x=5, double y=15.5); void wypisz(); private: double x; double y; ; Punkt::Punkt(double x, double y){ void Punkt::wypisz(){ cout << "(" << x << "," << y << ")" << endl; int main(){ Punkt p; p.wypisz(); return 0; K.Grzelak (Wykład 14) Programowanie w C++ 4 / 27

Wersja poprawna (z użyciem listy inicjalizacyjnej) class Punkt{ public: Punkt(double, double); void wypisz(); private: double x; double y; ; Punkt::Punkt(double wsp1, double wsp2):x(wsp1),y(wsp2){ void Punkt::wypisz(){ cout << "(" << x << "," << y << ")" << endl; int main(){ Punkt p; p.wypisz(); return 0; K.Grzelak (Wykład 14) Programowanie w C++ 5 / 27

Wersja z operatorem«chcielibyśmy tak używać klasy Punkt: int main(){ Punkt p; cout << p << endl; return 0; K.Grzelak (Wykład 14) Programowanie w C++ 6 / 27

Wersja z operatorem«chcielibyśmy tak używać klasy Punkt: int main(){ Punkt p; cout << p << endl; ofstream plik("punkty.txt"); plik << p << endl; plik.close(); return 0; Konieczne jest przeładowanie operatora «K.Grzelak (Wykład 14) Programowanie w C++ 7 / 27

Wersja z operatorem«class Punkt{ public: Punkt(double, double); void wypisz(); friend ostream & operator<<(ostream & os, const Punkt & p private: double x; double y; ; Punkt::Punkt(double wsp1, double wsp2):x(wsp1),y(wsp2){ void Punkt::wypisz(){ cout << "(" << x << "," << y << ")" << endl; ostream & operator<<(ostream & os, const Punkt & p){ os << "(" << p.x << "," << p.y << ")"; return os; K.Grzelak (Wykład 14) Programowanie w C++ 8 / 27

Na ostatnim wykładzie cd: Statyczna dana składowa klasy: deklaracja wewnatrz definicji klasy: static int licznik; definicja poza definicja klasy: int NazwaKlasy::licznik=0; jest tworzona w pamięci tylko raz i jest wspólna dla wszystkich obiektów tej samej klasy. K.Grzelak (Wykład 14) Programowanie w C++ 9 / 27

Z ostatniego wykładu, standard C++11 Modyfikacja pętli for i auto vector<double> liczby(10,-1.5); //Sumowanie kolejnych elementów wektora: double suma=0; for (auto elem : liczby){ suma+=elem; //Modyfikacja wektora (mnożenie przez 2): for (auto &elem : liczby){ elem*=2; K.Grzelak (Wykład 14) Programowanie w C++ 10 / 27

Dwa sposoby odwoływania się do funkcji składowych klasy Przykład dla klasy liczb zespolonych Z Z z1; Z* wsk; wsk = &z1; z1.abs() wsk->abs() K.Grzelak (Wykład 14) Programowanie w C++ 11 / 27

Dziedziczenie Dziedziczenie = definiowanie nowej klasy przy wykorzystaniu wcześniej istniejacej klasy Klasa podstawowa klasa od której się dziedziczy Klasa pochodna klasa dziedziczaca K.Grzelak (Wykład 14) Programowanie w C++ 12 / 27

Funkcje wirtualne przykład bez nich Przykład z Symfonii C++ Grębosza Klasa podstawowa class instrument{ public: void wydaj_dzwiek() { cout << "Nieokreślony brzdęk" << endl; private: int cena; string producent; ; K.Grzelak (Wykład 14) Programowanie w C++ 13 / 27

Funkcje wirtualne przykład bez nich Klasy pochodne class trabka: public instrument{ public: void wydaj_dzwiek(){ cout << "Tu-tu-tu" << endl; ; class beben: public instrument{ public: void wydaj_dzwiek(){ cout << "Bum-bum-bum" << endl; ; class fortepian: public instrument{ public: void wydaj_dzwiek(){ cout << "Plim-plim-plim" << endl; ; K.Grzelak (Wykład 14) Programowanie w C++ 14 / 27

Funkcje wirtualne przykład bez nich Funkcja main int main(){ instrument niezidentyfikowany_instrument; trabka zlota_trabka; fortepian steinway; beben bebenek; niezidentyfikowany_instrument.wydaj_dzwiek(); zlota_trabka.wydaj_dzwiek(); steinway.wydaj_dzwiek(); bebenek.wydaj_dzwiek(); K.Grzelak (Wykład 14) Programowanie w C++ 15 / 27

Funkcje wirtualne przykład bez nich Na ekranie: Nieokreślony brzdęk Tu-tu-tu Plim-plim-plim Bum-bum-bum K.Grzelak (Wykład 14) Programowanie w C++ 16 / 27

Funkcje wirtualne przykład bez nich Funkcja main, użycie wskaźników int main(){ instrument niezidentyfikowany_instrument; trabka zlota_trabka; fortepian steinway; beben bebenek; instrument *wskinstr; wskinstr = &niezidentyfikowany_instrument; wskinstr->wydaj_dzwiek(); wskinstr=&zlota_trabka; wskinstr->wydaj_dzwiek(); wskinstr=&steinway; wskinstr->wydaj_dzwiek(); wskinstr=&bebenek; wskinstr->wydaj_dzwiek(); K.Grzelak (Wykład 14) Programowanie w C++ 17 / 27

Dygresja: niejawna zamiana typów Przykłady: double liczba=15; char znak=97; Uwaga double liczba=1/2; K.Grzelak (Wykład 14) Programowanie w C++ 18 / 27

Dygresja: niejawna zamiana typów Wskaźnik do obiektu klasy podstawowej może być użyty do pokazania obiektu klasy pochodnej. Niejawna zamiana typów: wskaźnik klasy pochodnej może być zamieniony na wskaźnik (jednoznacznej) klasy podstawowej. K.Grzelak (Wykład 14) Programowanie w C++ 19 / 27

Funkcje wirtualne Na ekranie - wersja ze wskaźnikami: Nieokreślony brzdęk Nieokreślony brzdęk Nieokreślony brzdęk Nieokreślony brzdęk Program działa, ale we wszystkich przypadkach wywoływana jest funkcja składowa klasy podstawowej. K.Grzelak (Wykład 14) Programowanie w C++ 20 / 27

Funkcje wirtualne Druga wersja klasy podstawowej class instrument{ public: virtual void wydaj_dzwiek() { cout << "Nieokreślony brzdęk" << endl; private: int cena; string producent; ; K.Grzelak (Wykład 14) Programowanie w C++ 21 / 27

Funkcje wirtualne Przykład z Symfonii C++ Grębosza Teraz na ekranie (w wersji ze wskaźnikami): Nieokreślony brzdęk Tu-tu-tu Plim-plim-plim Bum-bum-bum Jeżeli w klasie podstawowej funkcja ma przedrostek virtual, to kompilator sprawdza na co wskaźnik pokazuje. Orientuje się według typu obiektu uruchamia funkcję z klasy obiektu pokazywanego przez wskaźnik. K.Grzelak (Wykład 14) Programowanie w C++ 22 / 27

Funkcje wirtualne Podobnie jest z referencjami: void muzyk(instrument & powierzony_instrument); int main(){ instrument niezidentyfikowany_instrument; trabka zlota_trabka; fortepian steinway; beben bebenek; muzyk(niezidentyfikowany_instrument); muzyk(zlota_trabka); muzyk(steinway); muzyk(bebenek); // Funkcja globalna void muzyk(instrument & powierzony_instrument){ powierzony_instrument.wydaj_dzwiek(); K.Grzelak (Wykład 14) Programowanie w C++ 23 / 27

Funkcje wirtualne Teraz na ekranie (w wersji z referencjami): Nieokreślony brzdęk Tu-tu-tu Plim-plim-plim Bum-bum-bum K.Grzelak (Wykład 14) Programowanie w C++ 24 / 27

Polimorfizm Polimorfizm (wielość-form) W funkcji muzyk linijka: powierzony_instrument.wydaj_dzwiek(); efektywnie wywoływana jako: powierzony_instrument.instrument::wydaj_dzwiek(); lub powierzony_instrument.trabka::wydaj_dzwiek(); lub powierzony_instrument.fortepian::wydaj_dzwiek(); lub powierzony_instrument.beben::wydaj_dzwiek(); K.Grzelak (Wykład 14) Programowanie w C++ 25 / 27

Polimorfizm Polimorfizm Polimorfizm = wielość form Polimorfizm ujawnia się tam, gdzie jest wywoływana funkcja wirtualna Klasa polimorficzna zawiera (lub dziedziczy) funkcję wirtualna K.Grzelak (Wykład 14) Programowanie w C++ 26 / 27

Polimorfizm Polimorfizm - po co? Dodawanie nowych klas będacych klasami pochodnymi od uprzednio istniejacej klasy jest znacznie prostsze. K.Grzelak (Wykład 14) Programowanie w C++ 27 / 27