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

Podobne dokumenty
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 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

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

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

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

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.

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

Wstęp do Programowania 2

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

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

Konstruktor kopiujacy

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

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

Wstęp do Programowania 2

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

Programowanie obiektowe

Programowanie obiektowe w C++ Wykład 12

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

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

Programowanie obiektowe i C++ dla matematyków

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

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

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

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Programowanie komputerowe. Zajęcia 7

PARADYGMATY PROGRAMOWANIA Wykład 3

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

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

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

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.

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++ Różnice między C a C++

Operatory na rzecz typu TString

Podstawy Programowania Obiektowego

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

Operacje wejścia/wyjścia odsłona pierwsza

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

Wyliczanie wyrażenia obiekty tymczasowe

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

Plik klasy. h deklaracje klas

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Wykład 8: klasy cz. 4

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

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

TEMAT : KLASY DZIEDZICZENIE

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Programowanie Obiektowe i C++

PARADYGMATY PROGRAMOWANIA Wykład 4

Projektowanie klas c.d. Projektowanie klas przykład

Programowanie Obiektowe i C++

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

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

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

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

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

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

Wykład 5: Klasy cz. 3

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

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

Wstęp do programowania

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki

Przeciążenie operatorów

Techniki Programowania wskaźniki

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

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

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

Język C++ wykład VIII

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

Zajęcia nr 4 Programowanie obiektowe konstruktory. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

C++ Przeładowanie operatorów i wzorce w klasach

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

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

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

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

PARADYGMATY PROGRAMOWANIA Wykład 2

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

Podstawy programowania skrót z wykładów:

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

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

Programowanie, część I

Programowanie - wykład 4

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

Dziedziczenie jednobazowe, poliformizm

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

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

Pola i metody statyczne

Podstawy Programowania Obiektowego

Programowanie w języku C++

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

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

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

Programowanie obiektowe i C++ dla matematyków

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

Wstęp do informatyki- wykład 9 Funkcje

Programowanie Obiektowew języku C++ Zadania L4

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

Transkrypt:

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

Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27

Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus funkcje składowe (metody) K.Grzelak (Wykład 12) Programowanie w C++ 3 / 27

Podział na pliki.h i.cc Każda klasa w osobnym pliku (na ogół) W pliku nagłówkowym (rozszerzenie.h) definicja klasy W pliku.cc (lub.cpp,.cxx... ) definicje funkcji składowych K.Grzelak (Wykład 12) Programowanie w C++ 4 / 27

Plik nagłówkowy z definicja klasy Przykład: Wektor2D.h #ifndef WEKTOR2D_H #define WEKTOR2D_H class Wektor2D { public: Wektor2D(){} // konstruktor standardowy Wektor2D(double a1,double b1,double a2,double b2): x1(a1),y1(b1),x2(a2),y2(b2) { } // drugi konstruktor Wektor2D() { } // destruktor void ustaw(double a1, double b1, double a2, double b2); double dlugosc(); private: double x1,y1,x2,y2; }; #endif K.Grzelak (Wykład 12) Programowanie w C++ 5 / 27

Plik z definicjami funkcji składowych Przykład: Wektor2D.cc #include<cmath> #include "Wektor2D.h" void Wektor2D::ustaw(double a1, double b1, double a2, double b2){ x1=a1; y1=b1; x2=a2; y2=b2; } double Wektor2D::dlugosc(){ double d=sqrt((x2-x1)*(x2-x1) +(y2-y1)*(y2-y1)); return d; } K.Grzelak (Wykład 12) Programowanie w C++ 6 / 27

Główny program, użycie nowego typu zmiennej Przykład: prog.cc #include<iostream> #include "Wektor2D.h" using namespace std; int main(){ Wektor2D v1; v1.ustaw(0.5,0.2,1.5,0.8); Wektor2D v2(0.6,0.3,1.5,1.8); cout «v1.dlugosc() «endl; cout «v2.dlugosc() «endl; return 0; } K.Grzelak (Wykład 12) Programowanie w C++ 7 / 27

Przekazywanie obiektów danej klasy do funkcji...... w taki sam sposób jak w przypadku obiektów typu int, double,... : przez wartość (nie polecany sposób, bo kopiowanie potencjalnie dużych obiektów): void (Wektor2D v1); przez referencję (jeśli funkcja ma zmieniać obiekt): void (Wektor2D &v1); przez referencję (jeśli funkcja ma nie zmieniać obiektu): void (const Wektor2D &v1); K.Grzelak (Wykład 12) Programowanie w C++ 8 / 27

Funkcje składowe typu const Funkcja składowa z przydomkiem const gwarantuje, że jeśli będzie wywołana na rzecz jakiegoś obiektu, to go nie zmodyfikuje. Np. Funkcje zwracajace wartości danych składowych klasy powinny mieć przydomek const. double getx1() const; K.Grzelak (Wykład 12) Programowanie w C++ 9 / 27

Przyjaciele - Friends Klasa może zadeklarować kto jest jej przyjacielem = ma dostęp do prywatnych składników klasy. Konsystentniej deklarować przyjaciół w części publicznej. funkcje friend: class A{ //... friend double B::fun(const A& a); friend void globfun(const A& a); //... }; K.Grzelak (Wykład 12) Programowanie w C++ 10 / 27

Przyjaciele - Friends Klasa może zadeklarować kto jest jej przyjacielem = ma dostęp do prywatnych składników klasy. Konsystentniej deklarować przyjaciół w części publicznej. klasy friend: class A{ //... friend class B; }; K.Grzelak (Wykład 12) Programowanie w C++ 11 / 27

Konstruktor i destruktor Konstruktor to specjalna funkcja składowa wywoływana automatycznie przy tworzeniu obiektu, a destruktor funkcja składowa wywoływana przed likwidacja obiektu. Konstruktor nazywa się tak samo jak klasa Destruktor nazywa się tak samo jak klasa + falka przed nazwa. Przed nazwami konstruktora i destruktora nie ma żadnego typu wartości zwracanej; nie ma return K.Grzelak (Wykład 12) Programowanie w C++ 12 / 27

Konstruktor i destruktor Może być wiele konstruktorów, ale destruktor co najwyżej jeden. Konstruktor służy do inicjalizacji obiektu W treści programu nie widać że będzie wywoływany destruktor. Destruktor najczęściej używany gdy trzeba zwolnić pamięć ( operator delete ) K.Grzelak (Wykład 12) Programowanie w C++ 13 / 27

Konstruktor kopiujacy Konstruktor kopiujacy to specjalna funkcja składowa wywoływana gdy jest robiona kopia obiektu (jawnie lub niejawnie). Jawne kopiowanie: Wektor2D v1; Wektor2D v2(v1); Wektor2D v3=v1; Uwaga: W poniższej sytuacji NIE jest wywoływany konstruktor kopiujacy: Wektor2D v1(0.5,0.2,1.5,0.8); Wektor2D v2; v2=v1; K.Grzelak (Wykład 12) Programowanie w C++ 14 / 27

Konstruktor kopiujacy Konstruktor kopiujacy to specjalna funkcja składowa wywoływana gdy jest robiona kopia obiektu (jawnie lub niejawnie). Niejawne kopiowanie: w przypadku przesyłania argumentów do funkcji przez wartość, gdy funkcja zwraca obiekt przez wartość, wypełnianie vector a STL... K.Grzelak (Wykład 12) Programowanie w C++ 15 / 27

Konstruktor kopiujacy dla klasy Wektor2D } Wektor2D (const Wektor2D & source){ x1=source.x1; y1=source.y1; x2=source.x2; y2=source.y2; K.Grzelak (Wykład 12) Programowanie w C++ 16 / 27

Automatycznie generowany konstruktor, destruktor, konstruktor kopiujacy Jeżeli nie zdefiniujemy standardowego konstruktora, konstruktora kopiujacego lub destruktora na ogół zostana stworzone automatycznie. W wielu przypadkach jest to wystarczajace. Konstruktor kopiujacy jest najczęściej potrzebny gdy składnikiem klasy jest wskaźnik. K.Grzelak (Wykład 12) Programowanie w C++ 17 / 27

Przeładowanie operatorów K.Grzelak (Wykład 12) Programowanie w C++ 18 / 27

Przeładowanie operatorów Przeładowanie operatorów to przedefiniowanie standardowych operatorów: +,,, /,... tak, żeby działały dla obiektów danej klasy. Przykład Klasa Ulamek, reprezentujaca ułamek zwykły. Dodajemy dwa ułamki: Ulamek u3= dodaj(u1,u2); Lepiej zdefiniować własny (przeładowany) operator + Ulamek u3=u1+u2; K.Grzelak (Wykład 12) Programowanie w C++ 19 / 27

Przeładowanie operatora dodawania Definiowanie własnego operatora (np. dodawania) dla danej klasy = definiowanie nowej funkcji o nazwie operator+ Funkcja musi mieć nazwę operator+ Co najmniej jednym z argumentów nowej funkcji operator+ musi być obiekt danej klasy Gdy napiszemy Ulamek u=u1+u2; funkcja operator+ zostanie uruchomiona automatycznie Funkcja operator+ może być funkcja składowa klasy albo funkcja globalna K.Grzelak (Wykład 12) Programowanie w C++ 20 / 27

Fragmenty definicji klasy Ulamek class Ulamek{ public: Ulamek(); Ulamek(int licznik, int mianownik); Ulamek operator+(const Ulamek& v1); void Wypisz(); friend Ulamek operator+(const Ulamek& u1, const Ulamek& u2); friend ostream& operator«(ostream& os, const Ulamek& u1); friend istream& operator»(istream& is, Ulamek& u1); private: int licznik; int mianownik; }; K.Grzelak (Wykład 12) Programowanie w C++ 21 / 27

Przeładowanie operatora dodawania klasy Ulamek Funkcja składowa klasy Ulamek Ulamek Ulamek::operator+(const Ulamek & u1){ Ulamek u; u.licznik=licznik*u1.mianownik+u1.licznik*mianow u.mianownik=mianownik*u1.mianownik; return u; } Ulamek u1(1,2),u2(1,3); Od teraz: Ulamek u=u1+u2; Taka funkcję można też wywołać jak zwykła funkcję: Ulamek u = u1.operator+(u2); K.Grzelak (Wykład 12) Programowanie w C++ 22 / 27

Przeładowanie operatora dodawania klasy Ulamek Funkcja globalna Ulamek operator+(const Ulamek& u1, const Ulamek& u2){ Ulamek u; u.licznik=u1.licznik*u2.mianownik+u2.licznik*u1. u.mianownik=u1.mianownik*u2.mianownik; return u; } friend Ulamek operator+(const Ulamek& u1, const Ulamek& u2); Ulamek u1(1,2),u2(1,3); Od teraz: Ulamek u=u1+u2; Taka funkcję można też wywołać jak zwykła funkcję: Ulamek u = operator+(u1,u2); K.Grzelak (Wykład 12) Programowanie w C++ 23 / 27

Jakie operatory można przedefiniować? Większość operatorów można przedefiniować Nie można przedefiniować:. :: Nie można przedefiniować symboli preprocesora # ## Nie można tworzyć nowych operatorów K.Grzelak (Wykład 12) Programowanie w C++ 24 / 27

Przeładowanie operatora «Zwykła funkcja Wypisz: cout «licznik «/ «mianownik «endl; Przeładowany operator «ostream& operator«(ostream& os, const Ulamek& u1){ os «u1.licznik «/ «u1.mianownik «endl; return os; } Teraz można napisać tak: cout «suma3= «us3 «endl; Można też zawołać jak zwykła funkcję: operator«(cout,us3); K.Grzelak (Wykład 12) Programowanie w C++ 25 / 27

Przeładowanie operatora «istream& operator»(istream& is, Ulamek& u1){ cout «Podaj ulamek «endl; cout «Licznik: ; is» u1.licznik; cout «Mianownik: ; is» u1.mianownik; if (!is) return is; } K.Grzelak (Wykład 12) Programowanie w C++ 26 / 27

cout Zapis którego standardowo używamy: int a=15; cout «a; Zapis funkcyjny: int a=15; cout.operator«(15); K.Grzelak (Wykład 12) Programowanie w C++ 27 / 27