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

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

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

Szablon klasy std::vector

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

Wyjątki (exceptions)

Język C++ wykład VIII

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

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

Programowanie i struktury danych

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

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

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

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

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

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

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

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

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

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

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

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

Wstęp do programowania. Wykład 1

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

Paradygmaty programowania

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

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

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

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

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

STL: Lekcja 1&2. Filozofia STL

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 w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

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

Przesłanianie nazw, przestrzenie nazw

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

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

Projektowanie klas c.d. Projektowanie klas przykład

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Wprowadzenie do szablonów szablony funkcji

Programowanie - wykład 4

Wprowadzenie do szablonów szablony funkcji

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

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

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

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

Technologie cyfrowe semestr letni 2018/2019

Programowanie obiektowe w C++ Wykład 12

Technologie cyfrowe semestr letni 2018/2019

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

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

1 Podstawy c++ w pigułce.

Programowanie Obiektowe i C++

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

1 Podstawy c++ w pigułce.

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

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

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

Wstęp do programowania

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

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

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

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

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

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

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

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

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.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

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

ALGORYTMY I STRUKTURY DANYCH

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

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

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

Podstawy Programowania Obiektowego

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

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

Co nie powinno być umieszczane w plikach nagłówkowych:

Podstawy algorytmiki i programowania - wykład 4 C-struktury

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

Wstęp do programowania

TEMAT : KLASY POLIMORFIZM

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

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

Wykład 8: Obsługa Wyjątków

Do czego służą klasy?

Programowanie, część I

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

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

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

Wstęp do programowania

Transkrypt:

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

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 8) Programowanie w C++ 2 / 31

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

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 8) Programowanie w C++ 4 / 31

Wybrane metody dla wektora (np. vector<int> vec;) vec.push_back() - 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 8) Programowanie w C++ 5 / 31

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 8) Programowanie w C++ 6 / 31

Dygresja 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 8) Programowanie w C++ 7 / 31

Dygresja 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 8) Programowanie w C++ 8 / 31

Dygresja 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 8) Programowanie w C++ 9 / 31

Dygresja 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 8) Programowanie w C++ 10 / 31

Dygresja 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 8) Programowanie w C++ 11 / 31

Dygresja 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 8) Programowanie w C++ 12 / 31

Przesyłanie pojemnika vector do funkcji Przykłady prototypów funkcji : Można tak: double srednia(vector<double> v); Lepiej: double srednia(vector<double> &v); lub w przypadku gdy nie chcemy modyfikować vector a: double srednia(const vector<double> &v); K.Grzelak (Wykład 8) Programowanie w C++ 13 / 31

Klasy...... czyli zaczynamy programowanie obiektowe K.Grzelak (Wykład 8) Programowanie w C++ 14 / 31

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 8) Programowanie w C++ 15 / 31

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, liczaca jego długość... klasa Punkt2D klasa Pracownik - metoda obliczajaca długość zatrudnienia, liczaca dodatek do pensji zwiazany z wysługa lat... K.Grzelak (Wykład 8) Programowanie w C++ 16 / 31

Definicja klasy Średnik na końcu! Podstawy składni class Wektor2D { public: double x1; double y1; double x2; double y2; ; Nowy typ danych, deklaracja: Wektor2D v; K.Grzelak (Wykład 8) Programowanie w C++ 17 / 31

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 8) Programowanie w C++ 18 / 31

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 8) Programowanie w C++ 19 / 31

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 8) Programowanie w C++ 20 / 31

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 8) Programowanie w C++ 21 / 31

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 8) Programowanie w C++ 22 / 31

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 8) Programowanie w C++ 23 / 31

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 8) Programowanie w C++ 24 / 31

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 8) Programowanie w C++ 25 / 31

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 8) Programowanie w C++ 26 / 31

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 8) Programowanie w C++ 27 / 31

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 8) Programowanie w C++ 28 / 31

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 8) Programowanie w C++ 29 / 31

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 8) Programowanie w C++ 30 / 31

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 8) Programowanie w C++ 31 / 31