Język C++ wykład VIII

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

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++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

STL: Lekcja 1&2. Filozofia STL

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.

Operacje wejścia/wyjścia (odsłona druga) - pliki

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

Jak Windows zarządza pamięcią?

Programowanie i struktury danych

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

Programowanie obiektowe

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Programowanie komputerowe. Zajęcia 5

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

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

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

Programowanie w językach

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

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

Wyjątki (exceptions)

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

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

Zaawansowane programowanie w języku C++ Biblioteka standardowa

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

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

Zaawansowane programowanie w C++ (PCP)

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.

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

obiekty funkcyjne - funktory

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

Pliki wykład 2. Dorota Pylak

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

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

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

Operatory na rzecz typu TString

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

Podstawy Programowania

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

Pliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string)

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

Wzorce funkcji (szablony)

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

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

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

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

Programowanie - wykład 4

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

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

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

Programowanie obiektowe w C++ Wykład 12

jest mocny, skoro da się w nim wyrazić nowe pojęcia; łatwiej przenieść go na nową platformę jest mniejszy.

dr inż. Jarosław Forenc

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

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

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

Szablon klasy std::vector

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

Wejście wyjście strumieniowe

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

TEMAT : KLASY POLIMORFIZM

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

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

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

Pliki wykład 2. Dorota Pylak

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Technologie cyfrowe semestr letni 2018/2019

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

Programowanie Obiektowe i C++

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

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

Kurs programowania. Wykład 9. Wojciech Macyna

Programowanie i struktury danych

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Wstęp do programowania obiektowego

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

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

Programowanie w języku C++

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

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

Programowanie Obiektowew języku C++ Zadania L4

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

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

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

Efekty uboczne błędów

Mechanizm dziedziczenia

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

Część 4 życie programu

Wykład :37 PP2_W9

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

Szablony klas, zastosowanie szablonów w programach

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

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

Technologie cyfrowe semestr letni 2018/2019

Szablony funkcji i klas (templates)

Wyliczanie wyrażenia obiekty tymczasowe

Wstęp do programowania

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Transkrypt:

Programowanie uzupełnienie notatek: dr Jerzy Białkowski

1 2 3 4

Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie, ukrywanie informacji (public, protected, private, friend) ˆ Polimorfizm i metody wirtualne ˆ Dziedziczenie ˆ pola static ˆ, ˆ Operacje wejścia-wyjścia ˆ

, lub szablony (ang. template) pozwalają na tworzenie kodu niezależnego od typów danych. template < parametry-wzorca > definicja-wzorca

funkcji 1 #include <i o s t r e a m > 2 3 template <class T> 4 T max ( T a, T b ) { 5 return ( a > b )? a : b ; 6 } 7 8 int main ( ) { 9 int a=10, b =15; 10 double c =14.0, d =3.9; 11 12 std : : cout << max ( a, b ) << std : : endl ; 13 std : : cout << max ( c, d ) << std : : endl ; 14 }

klas 1 #include <i o s t r e a m > 2 # include <cmath> 3 4 template <class T> 5 class Gauss { 6 public : 7 T a ; 8 T b ; 9 Gauss ( T c, T d ) : a ( c ), b ( d ) {} 10 double modul ( ) { return sqrt ( a*a+b*b ) ; } 11 } ; 12 int main ( ) { 13 Gauss<double> z ( 1. 0, 3. 4 ) ; 14 std : : cout << z. modul ( ) <<"\n" ; 15 Gauss<int> t(1, 3) ; 16 std : : cout << t. modul ( ) <<"\n" ; 17 }

Standard Template Library Biblioteka wzorców (szablonów) składa się m.in. ˆ vector ˆ list ˆ map ˆ string ˆ...

vector vector<t> reprezentuje tablicę obiektów typu T wyposarzoną w mechanizmy: ˆ void push_back(const T obj) - dodaje na końcu wektora kopię przekazanego argumentu ˆ void pop_back() - usuwa ostatni element z wektora ˆ void clear() - usuwa wszystkie elementy z wektora ˆ iterator insert(iterator pos, T obj) - wstawia element obj przed wskazywaną przez iterator pos pozycją i zwraca iterator do dostawionego elementu ˆ iterator erase(iterator pos) - usuwa element wskazywany przez pos i zwraca iterator do następnego elementu ˆ size_t size() - zwraca obecną ilość elementów wektora.

1 #include <i o s t r e a m > 2 #include <v e c t o r > 3 using namespace std ; 4 5 int main ( ) { 6 7 vector<int> tab ; 8 int n ; 9 cin >> n ; 10 11 while ( n>0) { 12 cin >> n ; 13 tab. push_back ( n ) ; 14 } 15 16 cout << "\ nrozmiar tablicy: " 17 << tab. size ( ) << "\nn" ; 18 }

string string jest klasą napisów w C++. ˆ size(),length() - zwraca ilość znaków w napisie ˆ at() - zwraca znak o podanym położeniu, (podobnie jak operator []) ˆ clear() - usuwa wszystkie znaki z napisu ˆ substr() - zwraca podciąg na podstawie indeksu początkowego i długości podciągu ˆ append() - dodaje zadany napis na końcu istniejącego ciągu

string 1 #include <i o s t r e a m > 2 #include <s t r i n g > 3 using namespace std ; 4 5 int main ( ) { 6 7 cout << " Podaj imie " ; 8 string imie ; 9 cin >> imie ; 10 11 string witaj=" Witaj " ; 12 string powitanie=witaj. append ( imie ) ; 13 // s t r i n g p o w i t a n i e=w i t a j+i m i e ; OK 14 15 cout << powitanie <<"\n" ; 16 }

ˆ istream, metody: get, getline, read ˆ ostream, metody: put, write

ˆ istream, metody: get, getline, read ˆ ostream, metody: put, write ˆ cin - strumień standardowego wejścia ˆ cout - strumień standardowego wyjścia ˆ cerr - strumień standardowego wyjścia błędów ˆ obsługa plików: ifstream, ofstream

1 #include <i o s t r e a m > 2 #include <fstream > 3 using namespace std ; 4 5 int main ( ) { 6 7 char a ; 8 ofstream f ( "plik.txt" ) ; 9 10 do { 11 a = cin. get ( ) ; 12 f << a ; 13 } while ( a!= '\n' ) ; 14 15 }

1 #include <i o s t r e a m > 2 #include <fstream > 3 #include <c s t d l i b > 4 using namespace std ; 5 6 int main ( ) { 7 8 const int rozmiar =256; 9 char bufor [ rozmiar ] ; 10 11 ifstream f ( "plik.txt" ) ; 12 if (! f ) { 13 cerr << " Nie moge otworzyc pliku\n" ; 14 exit ( 1 ) ; 15 } 16 17 while ( f. getline ( bufor, rozmiar ) ) { 18 cout << bufor << "\n" ; 19 } 20 21 }

Zgłaszanie sytuacji wyjątkowej ( (wy)rzucanie wyjątku ) 1 throw... ; // za... podstawiamy wartość Przechwytywanie wyjątków 1 try { 2 // b l o k z a w i e r a c j ą c y 3 // kod w którym może 4 // z o s t a ć zgoszony w y j ą t e k 5 } 6 7 catch (... ) { 8 // kod wykonywany w przypadku 9 // z g o s z e n i a wyjątku 10 }

1 #include <i o s t r e a m > 2 using namespace std ; 3 4 int dzielenie ( int a, int b ) { 5 if ( b == 0) throw " dzielenie przez zero" ; 6 if ( a % b!= 0) throw " reszta różna od 0" ; 7 return a/ b ; 8 } 9 10 int main ( ) { 11 try { 12 cout << dzielenie ( 4, 2 ) << endl ; 13 cout << dzielenie ( 1, 2 ) << endl ; 14 cout << dzielenie ( 2, 0 ) << endl ; 15 cout << dzielenie ( 3, 1 ) << endl ; 16 } 17 catch ( char *s ) { 18 cout << "Blad: " << s << endl ; 19 } 20 catch (... ) { cout << "Inny blad:\n" ; } 21 }

1 #include <i o s t r e a m > 2 using namespace std ; 3 4 int dzielenie ( int a, int b ) { 5 if ( b == 0) throw " dzielenie przez zero" ; 6 if ( a % b!= 0) throw a % b ; 7 return a/ b ; 8 } 9 10 int main ( ) { 11 try { 12 cout << dzielenie ( 4, 2 ) << endl ; 13 cout << dzielenie ( 1, 2 ) << endl ; 14 cout << dzielenie ( 2, 0 ) << endl ; 15 cout << dzielenie ( 3, 1 ) << endl ; 16 } 17 catch ( char * s ) { cout<<" Blad: "<<s<<endl ; } 18 catch ( int n ) { 19 cout << " Blad: reszta = " << n << endl ; 20 } 21 catch (... ) { cout << "Inny blad:\n" ; } 22 }

Mechanizm wyjątków ˆ mogą być zgłaszane przez wywołanie throw. ˆ mogą być przechwycone w bloku try { } ˆ W momencie przechwycenia wyjątku (w bloku try { }) ˆ przerywane jest wykonywanie kodu (w bloku try { }); ˆ sterowanie przekazywane jest do pierwszego bloku catch ( ) { }, którego typ argumentu odpowiada typowi wyjątku (typowi wartości zgłoszonej przez throw); ˆ sterowanie może być przekazane do innego (dalszego bloku) catch ( ) { } poprzez ponowne wywołanie throw, w przeciwnym wypadku po wyjściu z bloku catch ( ) { } strerowanie jest przekazywane za ostatni z bloków catch ˆ argument... pasuje do każdego wyjątku (catch (...) { }).

Mechanizm wyjątków (c.d.) ˆ O ile nie zostanie dopasowany żaden blok catch ( ) { } (wszystkie mają niezgodne typy wyjątków) lub wyjątek zostanie zgłoszony poza blokiem try { }), to program kończy działanie z błędem. ˆ W przypadku zagnieżdżonych bloków try { } przechwywanie jest przeprowadzane od najbardziej zagnieżdżonego bloku aż do dopasowania bloku catch ( ) { } (lub przy przejściu przez wszystkie poziomy zagnieżdżenia bez napotkania pasującego bloku catch ( ) { } do zakończenia programu z błędem. ˆ Zwykle zaleca się używanie hierarchicznej struktury wyjątków (z dziedziczeniem) oraz obsługi wyjątków od najbardziej szczegółowych do najbardziej ogólnych.

1 class Blad { /* */ } ; 2 class BladWeWy : Blad { /* */ } ; 3 class BladOtwarciaPliku : BladWeWy { /* */ } ; 4 class BladDostepuDoUrzad : BladWeWy { /* */ } ; 5 class BladArytmetyczny : Blad { /* */ } ; 6 class BladDzieleniaPrzezZero 7 : BladArytmetyczny { /* */ } ; 8 9 try { 10 //... 11 } 12 13 catch ( BladOtwarciaPliku ) { /*... */ } 14 catch ( BladDostepuDoUrzad ) { /*... */ } 15 catch ( BladWeWy ) { /*... */ } 16 catch ( BladDzieleniaPrzezZero ) { /*... */ } 17 catch ( BladArytmetyczny ) { /*... */ } 18 catch ( Blad ) { /*... */ } 19 catch (... ) { /*... */ }

Zadanie Napisz program, który ze standardowego wejścia wczytuje słowo i wyszukuje wszystkie wystąpnie tego słowa w pliku plik.txt. Zadanie Napisz rekurencyjną funkcję, która oblicza symbol Newtona ( n k). Zadanie Napisz klasę Gauss, która reprezentuje liczby zespolone. Użyj przeciążenia operatorów: +, -, *, /, ==. Zadanie Napisz procedurę, która rozwiązuje układ kongruencji: x a mod( m), x b mod( n). Zobacz twierdzenie Chińskie o resztach.

Zadanie Niech n będzie liczbą naturalną. Losujemy n punktów z kostki [0, 1] 3. Oznaczmy je przez (x 1, y 1, z 1 ), (x n, y n, z n ). Napisz procedurę, która oblicza liczbę s = s(n) będącą największą możliwą liczbą punktów (x i1, y i1, z i1 ),..., (x is, y is, z is ) o własności: x i1 x i2... x in, y i1 y i2... y in, z i1 z i2... z in. Ile wynosi s(n), dla n = 1, 2, 3, 4, 5, 6, 7,...? Zadanie Niech f : [a, b] R będzie ciągłą funkcją taką, że f (a) f (b) < 0. Napisz procedurę, która znajduje pierwiasek równania f (x) = 0. Użyj metody bisekcji. Zadanie Ile zer ma na końcu liczba 1000!?

Dziękuję za uwagę.