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

Podobne dokumenty
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 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 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 w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

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

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. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Wyjątki (exceptions)

Język C++ wykład VIII

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

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Szablon klasy std::vector

Wstęp do Programowania 2

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Programowanie i struktury danych

Zaawansowane programowanie w języku C++ Wyjątki

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

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

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

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

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

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 w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

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

Obsługa wyjątków. Język C++ WW12

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

Programowanie komputerowe. Zajęcia 7

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

Paradygmaty programowania

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

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

Mechanizm dziedziczenia

STL: Lekcja 1&2. Filozofia STL

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

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

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

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

Mechanizm dziedziczenia

W przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast

Wprowadzenie do szablonów szablony funkcji

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

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

Wstęp do programowania. Wykład 1

Wprowadzenie do szablonów szablony funkcji

Przesłanianie nazw, przestrzenie nazw

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

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

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

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

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

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

Programowanie obiektowe w C++ Wykład 12

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

Programowanie - wykład 4

Programowanie, część I

Projektowanie klas c.d. Projektowanie klas przykład

Technologie cyfrowe semestr letni 2018/2019

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

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

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

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Do czego służą klasy?

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

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

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 skrót z wykładów:

Podstawy Programowania Obiektowego

ALGORYTMY I STRUKTURY DANYCH

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

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

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. 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;

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

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

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Jak Windows zarządza pamięcią?

Podstawy Programowania Obiektowego

Programowanie w języku C++

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

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

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

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

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

Zaawansowane programowanie w C++ (PCP)

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Programowanie Obiektowe i C++

1 Podstawy c++ w pigułce.

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Laboratorium 1 - Programowanie proceduralne i obiektowe

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

1 Podstawy c++ w pigułce.

Transkrypt:

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

STL - powtórzenie STL Standard Template Libarary standardowa biblioteka szablonów Składowe biblioteki: 1 Pojemniki (kontenery) 2 Iteratory 3 Algorytmy K.Grzelak (Wykład 6) Programowanie w C++ 2 / 40

Pojemniki STL - powtórzenie Vector Set Deque List Map K.Grzelak (Wykład 6) Programowanie w C++ 3 / 40

vector - powtórzenie vector plik nagłówkowy #include<vector> dynamiczna tablica operator indeksowania [] lub metoda at() możliwość płynnej zmiany rozmiaru wektora szybkie dodawanie i usuwanie elementów na końcu wektora K.Grzelak (Wykład 6) Programowanie w C++ 4 / 40

Wybrane metody dla wektora (np. vector<int> vec;) vec.push_back(element) - dodawanie elementu na końcu wektora vec.pop_back() - usuwanie elementu z końca wektora vec.size() - zwraca liczbę elementów vec.clear() - usuwa wszystkie elementy vec[i] - zwraca element o indeksie i vec.at(i) - zwraca element o indeksie i K.Grzelak (Wykład 6) Programowanie w C++ 5 / 40

Klasy...... czyli zaczynamy programowanie obiektowe K.Grzelak (Wykład 6) Programowanie w C++ 6 / 40

Klasy Klasy to typy definiowane przez użytkownika Przykłady: klasa Wektor2D - reprezentowana przez współrzędne dwóch punktów, poczatkowego i końcowego klasa Punkt2D - reprezentowana przez dwie współrzędne klasa Pracownik - reprezentowana przez imię, nazwisko, stanowisko, numer identyfikacyjny, rok zatrudnienia, pensję... K.Grzelak (Wykład 6) Programowanie w C++ 7 / 40

Klasy Klasy to dane składowe plus funkcje składowe (metody) funkcje dedykowane dla (działajace na rzecz) obiektów danej klasy Przykłady metod w różnych klasach: klasa Wektor2D - metoda wypisujaca wektor na ekran, metoda liczaca jego długość... klasa Pracownik - metoda obliczajaca długość zatrudnienia, liczaca dodatek do pensji zwiazany z wysługa lat... K.Grzelak (Wykład 6) Programowanie w C++ 8 / 40

Definicja klasy Średnik na końcu! Podstawy składni class Wektor2D { public: double x1; double y1; double x2; double y2; }; Użycie w programie nowego typu danych: Wektor2D v; K.Grzelak (Wykład 6) Programowanie w C++ 9 / 40

Definicja klasy - dane składowe Podstawy składni x1,x2,y1,y2 to dane składowe Składnikami klasy moga być zmienne różnych typów, także obiekty innej klasy. To co jest deklarowane wewnatrz klasy, ma zakres ważności równy obszarowi całej klasy. K.Grzelak (Wykład 6) Programowanie w C++ 10 / 40

Definicja klasy - funkcje składowe (metody) Podstawy składni Funkcje składowe zdefiniowane sa wewnatrz klasy i moga używać wszystkich danych składowych. K.Grzelak (Wykład 6) Programowanie w C++ 11 / 40

Definicja klasy Przykład definicji class Wektor2D { public: double x1; double y1; double x2; double y2; double dlugosc(){ double d=sqrt((x2-x1)*(x2-x1) +(y2-y1)*(y2-y1)); return d; } }; K.Grzelak (Wykład 6) Programowanie w C++ 12 / 40

Użycie nowego typu Składnia z kropka int main(){ Wektor2D v1; v1.x1=0.5; v1.y1=0.2; v1.x2=1.5; v1.y2=0.8; cout «v1.dlugosc() «endl; return 0; } K.Grzelak (Wykład 6) Programowanie w C++ 13 / 40

Użycie nowego typu Składnia ze strzałka int main(){ Wektor2D v1; v1.x1=0.5; v1.y1=0.2; v1.x2=1.5; v1.y2=0.8; Wektor2D * wsk; wsk = &v1; cout «wsk->dlugosc() «endl; return 0; } K.Grzelak (Wykład 6) Programowanie w C++ 14 / 40

Definicja klasy Składnikami klasy moga być zmienne różnych typów, także obiekty innej klasy Klasa Punkt2D class Punkt2D{ public: double x; double y; }; Inaczej zdefiniowana klasa Wektor2D class Wektor2D{ public: Punkt2D poczatek; Punkt2D koniec; }; K.Grzelak (Wykład 6) Programowanie w C++ 15 / 40

public vs private public Składniki klasy (zwykle funkcje) - dostępne spoza klasy private Składniki klasy dostępne tylko dla funkcji składowych danej klasy Przez domniemanie wszystkie składniki klasy sa prywatne. K.Grzelak (Wykład 6) Programowanie w C++ 16 / 40

public vs private Klasa powinna udostępniać publicznie tylko te metody, które sa niezbędne do jej użytkowania. Dane składowe powinny być prywatne. K.Grzelak (Wykład 6) Programowanie w C++ 17 / 40

Definicja klasy ze składnikami publicznymi i prywatnymi class Wektor2D { public: void ustaw(double a1, double b1, double a2, double b2){ x1=a1; y1=b1; x2=a2; y2=b2; } double dlugosc(){ double d=sqrt((x2-x1)*(x2-x1) +(y2-y1)*(y2-y1)); return d; } private: double x1,y1,x2,y2; }; K.Grzelak (Wykład 6) Programowanie w C++ 18 / 40

Użycie nowego typu Próba bezpośredniego odwołania się z zewnatrz do składników prywatnych bład. int main(){ Wektor2D v1; v1.ustaw(0.5,0.2,1.5,0.8); cout «v1.dlugosc() «endl; return 0; } K.Grzelak (Wykład 6) Programowanie w C++ 19 / 40

Definicja klasy - podział na pliki.h i.cc Każda klasa w osobnym pliku W pliku nagłówkowym (rozszerzenie.h) definicja klasy W pliku.cc (lub.cpp,.cxx... ) definicje funkcji składowych K.Grzelak (Wykład 6) Programowanie w C++ 20 / 40

Plik nagłówkowy Przykład: Wektor2D.h #ifndef WEKTOR2D_H #define WEKTOR2D_H class Wektor2D { public: void ustaw(double a1, double b1, double a2, double b2); double dlugosc(); private: double x1,y1,x2,y2; }; #endif Powyższe polecenia dla preprocesora zabezpieczaja przed wstawieniem pliku nagłówkowego więcej niż raz. K.Grzelak (Wykład 6) Programowanie w C++ 21 / 40

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; } Jeśli funkcje poza definicja klasy, to musi być zdefiniowane z której klasy pochodza, np.: Wektor2D:: K.Grzelak (Wykład 6) Programowanie w C++ 22 / 40

Główny program 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); cout «v1.dlugosc() «endl; return 0; } K.Grzelak (Wykład 6) Programowanie w C++ 23 / 40

Kompilacja programu zapisanego w kilku plikach g++ -o prog prog.cc Wektor2D.cc Pliki nagłówkowe właczane sa przez preprocesor (polecenie #include wewnatrz plików.cc) K.Grzelak (Wykład 6) Programowanie w C++ 24 / 40

Konstruktor, czyli rozbudowujemy klasę Konstruktor czyli powołanie do życia obiektu i nadanie wartości danym składowym w jednej linijce Tak można zrobić przy użyciu funkcji składowej... Wektor2D v1; v1.ustaw(0.5,0.2,1.5,0.8);... ale tak byłoby prościej: Wektor2D v1(0.5,0.2,1.5,0.8); K.Grzelak (Wykład 6) Programowanie w C++ 25 / 40

Konstruktor Konstruktor to specjalna funkcja składowa wywoływana automatycznie przy tworzeniu obiektu. Konstruktor nazywa się tak samo jak klasa Przed nazwa nie ma żadnego typu wartości zwracanej; nie ma return Konstruktorów może być kilka (z różnymi argumentami) K.Grzelak (Wykład 6) Programowanie w C++ 26 / 40

Konstruktor Przykłady konstruktorów klasy Wektor2D // Konstruktor standardowy Wektor2D(){} // Drugi konstruktor Wektor2D(double a1, double b1, double a2, double b2){ x1=a1; y1=b1; x2=a2; y2=b2; } K.Grzelak (Wykład 6) Programowanie w C++ 27 / 40

Konstruktor Przykłady konstruktorów klasy Wektor2D // Konstruktor standardowy Wektor2D(){} // Inny zapis konstruktora // z poprzedniej klasy // (prawie równoważny) Wektor2D(double a1,double b1,double a2,double b2): x1(a1),y1(b1),x2(a2),y2(b2) { } W definicji klasy może nie być konstruktora konstruktor standardowy zostanie stworzony automatycznie. K.Grzelak (Wykład 6) Programowanie w C++ 28 / 40

Cały plik nagłówkowy z konstruktorami #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 void ustaw(double a1, double b1, double a2, double b2); double dlugosc(); private: double x1,y1,x2,y2; }; #endif K.Grzelak (Wykład 6) Programowanie w C++ 29 / 40

Konstruktor - użycie // Tutaj zostanie uruchomiony // standardowy konstruktor Wektor2D v1; v1.ustaw(0.5,0.2,1.5,0.8); // Tutaj zostanie uruchomiony drugi // konstruktor Wektor2D v1(0.5,0.2,1.5,0.8); K.Grzelak (Wykład 6) Programowanie w C++ 30 / 40

Destruktor Destruktor to specjalna funkcja składowa wywoływana automatycznie przed likwidacja obiektu. Destruktor nazywa się tak samo jak klasa + falka przed nazwa. Przed nazwa nie ma żadnego typu wartości zwracanej; nie ma return W definicji klasy może nie być destruktora. K.Grzelak (Wykład 6) Programowanie w C++ 31 / 40

Cały plik nagłówkowy z konstruktorami i destruktorem #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 6) Programowanie w C++ 32 / 40

Dodatek K.Grzelak (Wykład 6) Programowanie w C++ 33 / 40

Dodatek: Czym się różni vec.at() od vec[i]? vec.at(i) - zwraca element o indeksie i (sprawdzanie czy prawidłowy indeks sygnalizuje próbę odwołania do nieistniejacego elementu tablicy throws an out_of_range exception) vec[i] - zwraca element o indeksie i (bez sprawdzania czy prawidłowy indeks) K.Grzelak (Wykład 6) Programowanie w C++ 34 / 40

Dodatek: sytuacje wyjatkowe Jak zabezpieczyć się przed nieoczekiwanymi sytuacjami, np.: próba dzielenia przez zero, próba odwołania się do nieistniejacego elementu tablicy...? Wersja pierwsza Wiadomość o błędzie, wychodzenie z funkcji z kodem błędu, przerywanie programu... if(n<0){ cout «Próba dzielenia przez zero «endl; return 1; } K.Grzelak (Wykład 6) Programowanie w C++ 35 / 40

Dodatek: sytuacje wyjatkowe C++ exceptions Wersja druga Obsługa wyjatków (C++ exceptions) try sprawdzana część kodu znajduje się w bloku try: try {... } throw sygnalizacja sytuacji wyjatkowej poprzez użycie słowa kluczowego throw z wewnatrz bloku try catch blok zaraz za blokiem try; składnia catch jak zwykłej funkcji z jednym parametrem K.Grzelak (Wykład 6) Programowanie w C++ 36 / 40

Dodatek: sytuacje wyjatkowe C++ exceptions Przykład cout «Podaj dwie liczby rzeczywiste «endl; double r1,r2,iloraz=0.; cin» r1» r2; try{ if(fabs(r2)<1e-6){ throw 15; } iloraz=r1/r2; } catch(int a){ cout «Dzielenie przez zero, wyjątek nr «a «endl; } cout «iloraz= «iloraz «endl; K.Grzelak (Wykład 6) Programowanie w C++ 37 / 40

Dodatek: sytuacje wyjatkowe C++ exceptions 1 Po zgłoszeniu sytuacji wyjatkowej automatyczne wyjście z bloku try 2 Który z najbliższych bloków catch ma być uruchomiony zależy od typu wyjatku i typu argumentu catch 3 Po zadziałaniu obsługi wyjatków - powrót do programu za blokami try i catch 4 W przypadku braku pasujacego argumentu wołane sa funkcje terminate() abort() K.Grzelak (Wykład 6) Programowanie w C++ 38 / 40

Dodatek: sytuacje wyjatkowe standardowe wyjatki Przykład bez catch #include <iostream> #include <vector> using namespace std; int main() { vector<int> vec(15,6); cout «vec.at(15) «endl; return 0; } K.Grzelak (Wykład 6) Programowanie w C++ 39 / 40

Dodatek: sytuacje wyjatkowe standardowe wyjatki #include <iostream> #include <vector> #include <stdexcept> using namespace std; int main() { vector<int> vec(15,6); try{ cout «vec.at(15) «endl; } catch(out_of_range e){ cout «Out of range error «endl; cout «e.what() «endl; } return 0; } K.Grzelak (Wykład 6) Programowanie w C++ 40 / 40