Iteratory, Alokatory, Przyszłość C++, Boost
|
|
- Milena Niemiec
- 9 lat temu
- Przeglądów:
Transkrypt
1 Iteratory, Alokatory, Przyszłość C++, Boost Biblioteka STL Sebastian Deorowicz Politechnika Śląska Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
2 Plan wykładu 1 Iteratory 2 Alokatory 3 Przyszłość C++ 4 Biblioteki Boost Wyrażenia lambda Przydatne narzędzia Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
3 Plan wykładu 1 Iteratory 2 Alokatory 3 Przyszłość C++ 4 Biblioteki Boost Wyrażenia lambda Przydatne narzędzia Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
4 Iteratory Cechy iteratorów W niektórych zastosowaniach istotne jest aby dysponując typem iteratora można się było dowiedzieć, np. o tym jaki jest typ elementów przez niego wskazywany Można te i inne informacje uzyskać dzięki tzw. cechom iteratorów Dla każdego typu iteratora Iterator (różnego od iteratora wyjściowego, dla którego jest nieco inaczej) są zdefiniowane następujące typy: iterator_traits<iterator>::difference_type typ różnicy iterator_traits<iterator>::value_type typ wskazywanej wartości iterator_traits<iterator>::iterator_category kategoria iteratora iterator_traits<iterator>::reference typ referencji do wskazywanego obiektu iterator_traits<iterator>::pointer typ wskaźnika do wskazywanego obiektu Dzięki tym cechom możliwe jest np. pisanie przeciążonych funkcji dla iteratorów różnego typu przykładem może być standardowa funkcja distance, która jest różnie konkretyzowana w zależności od typu iteratora Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
5 Iteratory Własne iteratory Każda klasa iteratora musi mieć zdefiniowane cechy iteratora Cechy te podaje się konkretyzując klasę iterator, po której dziedziczy tworzona klasa iteratora Kiedy i jaki tworzyć iterator? Iteratory najczęściej tworzy się do nowych kolekcji, bo kolekcje istniejące są całkiem dobrze wyposażone w iteratory Może jednak być tak, że mamy jakieś specjalne wymagania i wtedy nawet dla standardowych kolekcji warto stworzyć iterator Jako przykład pokażemy sposób tworzenia iteratora wstawiającego na drugiej pozycji od początku Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
6 Iteratory iterator wstawiający na drugiej pozycji (cz. 1) Przykład #include <algorithm> #include <vector> #include <iterator> using namespace std; template<class Collection> class insert_2nd_iterator : public iterator<output_iterator_tag, void, void, void, void> { protected: Collection& coll; public: typedef Collection container_type; explicit insert_2nd_iterator(collection &c) : coll(c) {} insert_2nd_iterator<collection>& operator=(const typename Collection::value_type& val) { if(coll.begin() == coll.end()) coll.insert(coll.begin(), val); else coll.insert(++coll.begin(), val); return *this; } insert_2nd_iterator<collection>& operator*() { return *this; } insert_2nd_iterator<collection>& operator++() { return *this; } insert_2nd_iterator<collection>& operator++(int) { return *this; } }; Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
7 Iteratory iterator wstawiający na drugiej pozycji (cz. 2) Przykład int _tmain(int argc, _TCHAR* argv[]) { int tab[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; vector<int> vi, vi2(tab, tab+10); insert_2nd_iterator<vector<int> > ivi(vi); } copy(vi2.begin(), vi2.end(), ivi); ShowCollection(vi); // Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
8 Iteratory Co jeszcze? Tworzenie własnych iteratorów zostało przedstawione dość pobieżnie Więcej informacji dotyczących tworzenia własnych iteratorów: B. Stroustrup, Język C++, WNT, Warszawa, 2000 N. Josuttis, C++. Biblioteka standardowa. Podręcznik programisty, Helion, 2003 Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
9 Plan wykładu 1 Iteratory 2 Alokatory 3 Przyszłość C++ 4 Biblioteki Boost Wyrażenia lambda Przydatne narzędzia Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
10 Alokatory Po co wiedzieć coś więcej o alokatorach? Tworząc własną kolekcję możemy chcieć zapewnić interfejs zgodny z interfejsem kolekcji STL one używają alokatorów do przydziału pamięci Może nam nie odpowiadać działanie domyślnego alokatora i będziemy chcieli stworzyć własny Czym są alokatory? Alokatory to abstrakcja wszystko co zachowuje się jak alokator (udostępnia te same metody) jest alokatorem Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
11 Alokatory Metody udostępniane przez alokatory address(ref) zwraca adres obiektu przekazanego przez referencję allocate(size) alokuje obszar na size elementów deallocate(ptr, size) zwalnia obszar pamięci wskazywany przez ptr i zajmowany przez size elementów construct(ptr, val) konstruuje obiekt pod adresem ptr inicjalizując go wartością val destroy(ptr) wywołuje destruktor dla obiektu wskazywanego przez ptr Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
12 Alokatory Co trzeba wiedzieć chcąc zdefiniować własny alokator? Dlaczego nie podoba się nam domyślny alokator Jak chcemy stworzyć lepszy i czy na pewno będzie się on lepiej sprawował Źródła wiedzy B. Stroustrup, Język C++, WNT, Warszawa, 2000 N. Josuttis, C++. Biblioteka standardowa. Podręcznik programisty, Helion, 2003 Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
13 Alokatory Przykładowy pomysł na nowy alokator Często domyślny alokator jest tak implementowany, że za każdym razem kiedy potrzebna jest pamięć, wywołuje operator new Nie ma to większego znaczenia dla kolekcji vector czy deque Dla kolekcji asocjacyjnych i list może to mieć jednak bardzo duże znaczenie Operator new rzadko kiedy jest bardzo efektywny, bo musi się komunikować z systemem operacyjnym Rozwiązaniem mogłoby być np. swego rodzaju buforowanie alokacji: alokator alokuje co jakiś czas większą pulę pamięci i na żądanie udostępnia właśnie ją dopiero po wyczerpaniu puli żąda od systemu operacyjnego nowego obszaru pamięci przy zwalnianiu małych obiektów, pamięć przez nie zajmowana trafia do puli i dopiero jeśli jest jej dużo, to zwalnia ją w systemie operacyjnym Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
14 Plan wykładu 1 Iteratory 2 Alokatory 3 Przyszłość C++ 4 Biblioteki Boost Wyrażenia lambda Przydatne narzędzia Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
15 Nieco dłuższa historia standaryzacji C pierwsze wydanie książki B. Stroustrupa, Język C pierwsze spotkanie komitetu standaryzacyjnego WG pierwsza robocza wersja standardu 1996 druga robocza wersja standardu 1998 standard C pierwszy raport techniczny (TR1) 2004 raport techniczny dotyczący wydajności (Performance TR) 2005 dokument Library TR1 określający m.in. rozszerzenia biblioteki standardowej o kolekcje oparte na tablicach mieszających ( 2006(7) dokument Decimal TR zawierający rozszerzenie języka o typy w arytmetyce dziesiętnej, decimal32, decimal64, decimal128 ( 2007(8) dokument Library TR2 zawierający kolejne rozszerzenia biblioteki standardowej, np. prawdopodobnie filesystem z Boost; można też zgłaszać własne propozycje :-) ok nowy standard C++0x 1 Na podstawie Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
16 Library TR1 Nowe rzeczy Przestrzeń nazw std::tr1 Narzędzia ogólnego przeznaczenia Inteligentne wskaźniki shared ptr na podstawie Boost Wyrażenia regularne na podstawie Boost Generatory liczb pseudolosowych na podstawie Boost Narzędzia wspomagające metaprogramowanie za pomocą wzorców: ang. reference wrapper Złączenia lambda Cechy typów (ang. type traits) Krotki (ang. tuples) Kolekcje Tablice stałych rozmiarów o interfejsie kolekcji na podstawie Boost Kolekcje oparte na tablicach mieszających Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
17 Library TR1 Istniejące implementacje Na razie tylko Dinkumware ( wersja dla VC++ Express Edition cena: $80 wersja dla VC++6 VC++2005, GCC pod Linuxa ( ) cena: $200 wersja z kodami źródłowymi cena: tylko $2300 Więcej szczegółów Ostatnia wersja robocza Library TR1 Dokumentacja Dinkumware Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
18 Kierunki rozwoju C++ 2 Plany różnie może jeszcze być z ich realizacją Zachowanie wstecznej kompatybilności z C++ i C przy jednoczesnym rozwoju Rozwój narzędzi do programowania generycznego i niskopoziomowego Ułatwienie startu początkującym, m.in. poprzez garbage collection Rozszerzenia języka Wbudowanie Library TR1 do standardu i rozszerzenie go jeszcze o kolejne biblioteki 2 Na podstawie Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
19 Kierunki rozwoju C++ Wybrane artykuły o C++0x B. Stroustrup, A Brief Look at C++0x, 2006, G. Reis, B. Stroustrup, Specifying C++ Concepts, 2006, bs/popl06.pdf B. Stroustrup, The Design of C++0x, 2005, bs/rules.pdf Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
20 Plan wykładu 1 Iteratory 2 Alokatory 3 Przyszłość C++ 4 Biblioteki Boost Wyrażenia lambda Przydatne narzędzia Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
21 Biblioteki Boost Czym są? Stanowią rozszerzenie biblioteki standardowej C++ Część z nich została umieszczona w Library TR1, a inne kandydują do Library TR2 W wielu sytuacjach znacząco upraszczają kod Są oferowane na całkowicie darmowej licencji jeszcze większa swoboda używania kodu niż dla GNU GPL Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
22 Biblioteki Boost przegląd Przetwarzanie tekstów 3 conversion/lexical cast konwersje leksykalne (np. między typem string a typami liczbowymi) format operacje podobne do printf, ale bezpieczne pod względem typów iostreams strumienie wejścia/wyjścia z możliwością definiowania filtrów regex wyrażenia regularne spirit narzędzia do tworzenia analizatorów składniowych; zapis gramatyki podobny do notacji EBNF string algo algorytmy tekstowe uzupełniające algorytmy obecne w bibliotece standardowej tokenizer przetwarzanie tekstów podzielonych na tokeny wave preprocesor funkcjonalnie zgodny preprocesorem C/C++ 3 Na podstawie Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
23 Biblioteki Boost przegląd Kolekcje array tablice o stałym rozmiarze; interfejs zgodny z STL, zwykle wydajniejsze niż vector dynamic bitset alternatywa dla std::bitset umożliwiająca zmiany rozmiaru (zwykle wolniejsza) graph grafy (z wieloma algorytmami na nich operującymi) multi array tablice wielowymiarowe multi index umożliwia indeksowanie kolekcji (w tym standardowych) według różnych kryteriów pointer container kolekcje umożliwiające bezpieczne i wygodne przechowywanie wskaźników property map definiuje interfejsy łączące obiekty klucze z obiektami wartości variant kolekcja będąca uogólnieniem union Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
24 Biblioteki Boost przegląd Iteratory graph iteratory służące do nawigowania po grafach iterators środowisko do wygodnego tworzenia iteratorów operators wzorce ułatwiające definiowanie operatorów i iteratorów do własnych klas tokenizer nawigacja po tekstach przetwarzanych jako tokeny Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
25 Biblioteki Boost przegląd Algorytmy graph algorytmy grafowe (np. Dijkstra) minmax jednoczesne wyszukiwanie minimum i maksimum string algo algorytmy przetwarzania tekstów utility różne przydatne narzędzia, które gdzie indziej nie pasowały range operacje na zakresach Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
26 Biblioteki Boost przegląd Obiekty funkcyjne i programowanie wyższego rzędu bind, mem fn uogólnienie bind1st, bind2nd funciton mechanizm wywołań zwrotnych functional rozszerzony zestaw adaptatorów obiektów funkcyjnych z STL functional/hash haszujące obiekty funkcyjne lambda nienazwane obiekty funkcyjne ref przekazywanie referencji do obiektów do standardowych funkcji (eliminuje kosztowne kopiowanie) signals implementacja sygnałów result of wyznaczanie typu wyrażenia Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
27 Biblioteki Boost przegląd Programowanie generyczne call traits automatyczne wyznaczanie najlepszego sposobu przekazywania parametrów concept check szablony ułatwiające programowanie generyczne enable if sterowanie włączaniem do zbioru specjalizacji branych pod uwagę przy wywołaniach przeciążonych in place factory, typed in place factory infrastruktura bezpośredniej konstrukcji obiektów zawieranych operators ułatwienie wyposażania klas w operatory property map definiuje interfejsy łączące obiekty klucze z obiektami wartości static assert asercje czasu kompilacji type traits informacje o typach w czasie kompilacji Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
28 Biblioteki Boost przegląd Metaprogramowanie mpl metaprogramowanie static assert asercje czasu kompilacji type traits informacje o typach w czasie kompilacji Metaprogramowanie preprocesora preprocessor programowanie w preprocesorze z użyciem m.in. list, algorytmów, rekursji Programowanie współbieżne thread przenośne programowanie wielowątkowe Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
29 Biblioteki Boost przegląd Metaprogramowanie mpl metaprogramowanie static assert asercje czasu kompilacji type traits informacje o typach w czasie kompilacji Metaprogramowanie preprocesora preprocessor programowanie w preprocesorze z użyciem m.in. list, algorytmów, rekursji Programowanie współbieżne thread przenośne programowanie wielowątkowe Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
30 Biblioteki Boost przegląd Metaprogramowanie mpl metaprogramowanie static assert asercje czasu kompilacji type traits informacje o typach w czasie kompilacji Metaprogramowanie preprocesora preprocessor programowanie w preprocesorze z użyciem m.in. list, algorytmów, rekursji Programowanie współbieżne thread przenośne programowanie wielowątkowe Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
31 Biblioteki Boost przegląd Matematyka math różne szablony i funkcje matematyczne numeric/conversion bezpieczne konwersje pomiędzy typami numerycznymi integer wydajne obliczenia na liczbach całkowitych interval rozszerzenie obliczeń matematycznych na przedziały math/common factor wyznaczanie NWD i NWW math/octonion oktoniony (uogólnienie liczb zespolonych) math/quaternion kwaterniony (uogólnienie liczb zespolonych) math/special functions funkcje matematyczne takie jak np. atanh multi array tablice wielowymiarowe operators ułatwienie wyposażania klas w operatory random generatory liczb pseudolosowych rational obsługa liczb wymiernych ublas algebra liniowa na wektorach i macierzach Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
32 Biblioteki Boost przegląd Poprawność i testowanie concept check szablony ułatwiające programowanie generyczne static assert asercje czasu kompilacji test narzędzia ułatwiające testowanie aplikacji Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
33 Biblioteki Boost przegląd Struktury danych any kolekcja umożliwiająca przechowywanie danych różnych typów compressed pair uogólnienie std::pair wydajniej przechowujące pary, w których jeden z argumentów jest pusty multi index umożliwia indeksowanie kolekcji (w tym standardowych) według różnych kryteriów pointer container kolekcje umożliwiające bezpieczne i wygodne przechowywanie wskaźników typle krotki (uogólnienie std::pair) variant kolekcja będąca uogólnieniem union Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
34 Biblioteki Boost przegląd Wejście/wyjście assign wygodne przypisywanie szeregu wartości do kolekcji format operacje podobne do printf, ale bezpieczne pod względem typów io state savers zachowanie stanu obiektów biblioteki iostream iostreams strumienie wejścia/wyjścia z możliwością definiowania filtrów program options wygodne przetwarzanie parametrów wywołania programu z wiersza poleceń lub parametrów z plików konfiguracyjnych serialization serializacja (zachowywanie i przywracanie stanu) obiektów Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
35 Biblioteki Boost przegląd Inne języki programowania python współpraca programów w C++ i Pythonie Pamięć operacyjna pool obsługa pul pamięciowych (pojedyncze alokacje na dużą liczbę małych obiektów) smart ptr różnego rodzaju inteligentne wskaźniki utility różne przydatne narzędzia, które gdzie indziej nie pasowały Parsowanie spirit narzędzia do tworzenia parserów Interfejsy programistyczne function mechanizm wywołań zwrotnych parameter przekazywanie nazwanych parametrów Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
36 Biblioteki Boost przegląd Inne języki programowania python współpraca programów w C++ i Pythonie Pamięć operacyjna pool obsługa pul pamięciowych (pojedyncze alokacje na dużą liczbę małych obiektów) smart ptr różnego rodzaju inteligentne wskaźniki utility różne przydatne narzędzia, które gdzie indziej nie pasowały Parsowanie spirit narzędzia do tworzenia parserów Interfejsy programistyczne function mechanizm wywołań zwrotnych parameter przekazywanie nazwanych parametrów Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
37 Biblioteki Boost przegląd Inne języki programowania python współpraca programów w C++ i Pythonie Pamięć operacyjna pool obsługa pul pamięciowych (pojedyncze alokacje na dużą liczbę małych obiektów) smart ptr różnego rodzaju inteligentne wskaźniki utility różne przydatne narzędzia, które gdzie indziej nie pasowały Parsowanie spirit narzędzia do tworzenia parserów Interfejsy programistyczne function mechanizm wywołań zwrotnych parameter przekazywanie nazwanych parametrów Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
38 Biblioteki Boost przegląd Inne języki programowania python współpraca programów w C++ i Pythonie Pamięć operacyjna pool obsługa pul pamięciowych (pojedyncze alokacje na dużą liczbę małych obiektów) smart ptr różnego rodzaju inteligentne wskaźniki utility różne przydatne narzędzia, które gdzie indziej nie pasowały Parsowanie spirit narzędzia do tworzenia parserów Interfejsy programistyczne function mechanizm wywołań zwrotnych parameter przekazywanie nazwanych parametrów Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
39 Biblioteki Boost przegląd Różne conversion rzutowania polimorficzne i leksykalne numeric/conversion konwersje numeryczne crc obliczanie sum kontrolnych date time operacje na datach filesystem przenośne operacje na katalogach, plikach, ścieżkach dostępu optional wzorzec uzupełniający typ o wartość specjalną (np. informacje o błędzie) program options wygodne przetwarzanie parametrów wywołania programu z wiersza poleceń timer przenośny pomiar czasu tribool 3-wartościowy typ logiczny utility różne przydatne narzędzia, które gdzie indziej nie pasowały value initialized unifikacja sposobu inicjalizacji obiektów Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
40 Boost/Lambda Czym jest biblioteka lambda? 4 Wyrażenia lambda to inaczej funkcje nienazwane Wyrażenia te przydają się np. wtedy, kiedy mamy do napisania mały obiekt funkcyjny, który zostanie użyty tylko raz i szkoda nam miejsca/czasu na definiowanie obiektu 4 Dostępna w pliku nagłówkowym boost/lambda/lambda.hpp i kilku innych Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
41 Boost/Lambda zobaczmy jak to wygląda Przykład #include "stdafx.h" #include <iostream> #include <vector> #include <algorithm> #include <boost/lambda/lambda.hpp> using namespace boost::lambda; int _tmain(int argc, _TCHAR* argv[]) { int tab[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; std::vector<int> vi(tab, tab+10); for_each(vi.begin(), vi.end(), std::cout << _1*2 << "\n"); } Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
42 Boost/Lambda Wyrażenia lambda Symbole zastępcze 1,..., 9 są cechą charakterystyczną wyrażeń lambda przechowują argumenty Nazwy tych symboli można w razie potrzeby przedefiniować Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
43 Boost/Lambda Przykład #include "stdafx.h" #include <iostream> #include <boost/lambda/lambda.hpp> #include <boost/function.hpp> using namespace boost::lambda; int _tmain(int argc, _TCHAR* argv[]) { (std::cout << _4 << " " << _3 << " " << _2 << " " << _1 << "\n") ("Co", "to", "jest", "lambda"); // lambda to jest Co boost::function<double(double, double, double)> delta = _2*_2-4*_1*_3; } std::cout << delta(2, 3, 5); // -31 Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
44 Boost/Lambda Kilka instrukcji w wyrażeniu Wewnątrz wyrażenia nie wolno użyć średnika, ale można przecinka jako separatora Trzeba pamiętać, aby całość ująć w nawiasy Przykład int tab[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; vector<int> vi(tab, tab+10); for_each(vi.begin(), vi.end(), (_1 *= 2, cout << _1 << " ")); // Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
45 Boost/Lambda Wywoływanie funkcji w wyrażeniach lambda Biblioteka oferuje wzorzec bind służący do wiązania wywołań z parametrami 5 Wzorzec znacznie wygodniejszy w użyciu niż standardowe bind1st Przykład double power(double x, int n) { double r; for(r = 1; n > 0; n--) r *= x; return r; }... int tab[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; vector<int> vi(tab, tab+10); for_each(vi.begin(), vi.end(), cout << bind(&power, _1, 3) << " "); // W pliku nagłówkowym boost/lambda/bind.hpp Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
46 Boost/Lambda Przykład int tab[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; vector<int> vi(tab, tab+10); for_each(vi.begin(), vi.end(), cout << _1 << " "); cout << endl; // for_each(vi.begin(), vi.end(), cout << " " << _1); cout << endl; // for_each(vi.begin(), vi.end(), cout << constant(" ") << _1); cout << endl; // Uwaga na to co jest wyrażeniem lambda W drugim przykładzie wynik cout << " " nie jest wyrażeniem lambda więc tylko raz będzie ten kod wykonany Dopiero pojawienie się _1 sygnalizuje, że mamy do czynienia z wyrażeniem lambda Trzeba jawnie zapisać, że chodzi o wyrażenie lambda (constant) Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
47 Boost/Lambda Przykład int tab[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; vector<int> vi(tab, tab+10); for_each(vi.begin(), vi.end(), cout << _1 << " "); cout << endl; // for_each(vi.begin(), vi.end(), cout << " " << _1); cout << endl; // for_each(vi.begin(), vi.end(), cout << constant(" ") << _1); cout << endl; // Uwaga na to co jest wyrażeniem lambda W drugim przykładzie wynik cout << " " nie jest wyrażeniem lambda więc tylko raz będzie ten kod wykonany Dopiero pojawienie się _1 sygnalizuje, że mamy do czynienia z wyrażeniem lambda Trzeba jawnie zapisać, że chodzi o wyrażenie lambda (constant) Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
48 Boost/Lambda Przykład int tab[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; vector<int> vi(tab, tab+10); int i = 0; for_each(vi.begin(), vi.end(), cout << "vi[" << i++ << "]=" << _1 << " "); cout << endl; // vi[0]= for_each(vi.begin(), vi.end(), cout << constant("vi[") << var(i)++ << "]=" << _1 << " "); cout << endl; // vi[1]=0 vi[2]=1 vi[3]=2 vi[4]=3 vi[5]=4 vi[6]=5 vi[7]=6 vi[8]=7 vi[9]=8 vi[10]=9 Uwaga na zmienne Ze zmiennymi jest analogicznie jak ze stałymi Jeśli chcemy używać zmiennej, to musimy ją ująć w var() Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
49 Boost/Lambda Przykład int tab[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; vector<int> vi(tab, tab+10); int i = 0; for_each(vi.begin(), vi.end(), cout << "vi[" << i++ << "]=" << _1 << " "); cout << endl; // vi[0]= for_each(vi.begin(), vi.end(), cout << constant("vi[") << var(i)++ << "]=" << _1 << " "); cout << endl; // vi[1]=0 vi[2]=1 vi[3]=2 vi[4]=3 vi[5]=4 vi[6]=5 vi[7]=6 vi[8]=7 vi[9]=8 vi[10]=9 Uwaga na zmienne Ze zmiennymi jest analogicznie jak ze stałymi Jeśli chcemy używać zmiennej, to musimy ją ująć w var() Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
50 Boost/Lambda Instrukcje sterujące 6 if_then(cond, then_code), if_(cond)[then_code] alternatywne postacie instrukcji warunkowej if_then_else(cond, then_code, else_code), if_(cond)[then_code].else_[else_code] znowu instrukcje warunkowe while_loop(cond, body), while_(cond)[body] alternatywne postacie instrukcji pętli while while_loop(cond) pętla while bez ciała do_while_loop(cond, body), do_[body].while_(cond) alternatywne postacie instrukcji pętli do while do_while_loop(cond) pętla do while bez ciała for_loop(init, cond, incr, body), for_(init, cond, incr)[body] instrukcja pętli for for_loop(init, cond, incr) instrukcja pętli for bez ciała if_then_else_return(cond, then_code, else_code) operator?: 6 Dostępne w plikach nagłówkowych boost/lambda/if.hpp oraz boost/lambda/loops.hpp Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
51 Boost/Lambda Przykład #include "stdafx.h" #include <algorithm> #include <iostream> #include <vector> #include <boost/lambda/lambda.hpp> #include <boost/lambda/if.hpp> #include <boost/lambda/loops.hpp> using namespace std; using namespace boost::lambda; int _tmain(int argc, _TCHAR* argv[]) { int tab[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; vector<int> vi(tab, tab+10); } random_shuffle(vi.begin(), vi.end()); for_each(vi.begin(), vi.end(), if_(_1 < 5)[cout << _1 << " "].else_[cout << -_1 << " "]); cout << endl; // for_each(vi.begin(), vi.end(), for_(var(cout) << "\n", _1 > 0, _1--)[var(cout) << "*"]); // ******** // * // ********* // ** //... Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
52 Boost/Lambda Podsumowanie Wyrażenia lambda pozwalają na znacznie więcej niż tu pokazano przykłady miały raczej zachęcić do poznania biblioteki niż ją w całości zaprezentować Wyrażenia lambda są pomocne szczególnie wtedy, kiedy normalnie utworzono by niewielki obiekt funkcyjny Dokładniejsze omówienie tych wyrażeń: B. Karlsson, Więcej niż C++. Wprowadzenie do bibliotek Boost, Helion, Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
53 Boost/static assert Asercje w C++ W C++ dostępne są asercje obliczane w czasie działania programu (assert) powodują one zatrzymanie wykonywania programu w przypadku wystąpienia błędu krytycznego, który uniemożliwia dalsze działanie programu Asercje w C++ z Boost Biblioteka static assert udostępnia makrodefinicję BOOST_STATIC_ASSERT obliczaną w czasie kompilacji zatrzymuje ona kompilację z komunikatem o błędzie Kiedy asercje czasu kompilacji mają sens? Kiedy nie ma sensu kompilować programu, bo programista popełnił błąd przy stosowaniu biblioteki czy własnych funkcji W metaprogramowaniu, które staje się obecnie coraz popularniejsze Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
54 Boost/static assert Przykład #include "stdafx.h" #include <boost/static_assert.hpp> using namespace boost; // Tylko 64-bitowy kompilator BOOST_STATIC_ASSERT(sizeof(int) == 8); int _tmain(int argc, _TCHAR* argv[]) {... } Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
55 Boost/Any Opis Biblioteka udostępnia klasę any zdolną do przechowywania wartości w zasadzie dowolnego typu Dostępny jest też wzorzec funkcji any cast służącej do wyciągania wartości odpowiedniego typu Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
56 Boost/Any Przykład #include "stdafx.h" #include <algorithm> #include <vector> #include <bitset> #include <iostream> #include <boost/any.hpp> using namespace std; using namespace boost; bool check_string(const any& X) { return any_cast<string>(&x)!= NULL; } int _tmain(int argc, _TCHAR* argv[]) { vector<any> va; int i = 10; double d = 20.53; string s = "Tekst"; bitset<10> b(string(" ")); va.push_back(i); va.push_back(d); va.push_back(s); va.push_back(s); va.push_back(b); } cout << count_if(va.begin(), va.end(), check_string) << endl; // 2 cout << any_cast<int>(va[0]) << endl; // 10 cout << any_cast<string>(va[2]) << endl; // Tekst Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
57 Co będzie za tydzień? Poznamy kolejne możliwości bibliotek Boost, m.in., wyrażenia regularne, grafy Dowiemy się o tym jakie są jeszcze inne przydatne i popularne biblioteki Poznamy ideę metaprogramowania Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost / 50
Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:
Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,
Szablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
Część 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
Programowanie i struktury danych
Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne
Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:
Program przedmiotu Programowanie (język C++) Wykład 1. Język C a C++. Definiowanie prostych klas. Typy referencyjne. Domyślne wartości argumentów. PrzeciąŜanie funkcji. Konstruktory, destruktory. Definiowanie
Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
Szablony funkcji i klas (templates)
Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp
I - Microsoft Visual Studio C++
I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i
W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :
Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;
Spis treści. Wprowadzenie 15
Spis treści Wprowadzenie 15 1. Mechanizmy języka C++ 19 1.1. Struktura programu jednostki translacji.................. 21 1.1.1. Składnia tekstu źródłowego...................... 22 1.1.2. Preprocesor...
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);
Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)
Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest
STL: Lekcja 1&2. Filozofia STL
STL: Lekcja 1&2 Tematy: Filozofia STL Po co nam STL? Podstawowa zawartość STL Co warto znać zanim zaczniemy pracę z STL?: wskaźniki Praca na tekstach: klasa String Vector: nowy wymiar standardowych tablic.
Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:
Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie
Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.
Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji
Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.
1. Pierwszy program // mój pierwszy program w C++ #include using namespace std; cout
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 uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i
Technologie cyfrowe semestr letni 2018/2019
Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 7 (08.04.2019) Wikipedia Programowanie komputerów proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programów
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.
M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza
TEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod
Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()
Język C++ Różnice między C a C++
Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci
Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia
Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017 Tematyka
Zaawansowane programowanie w języku C++ Biblioteka standardowa
Zaawansowane programowanie w języku C++ Biblioteka standardowa Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
Technologie cyfrowe semestr letni 2018/2019
Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 8 (15.04.2019) Kompilacja Kompilacja programu (kodu): proces tłumaczenia kodu napisanego w wybranym języku na kod maszynowy, zrozumiały
Paradygmaty programowania
Paradygmaty programowania Programowanie generyczne w C++ Dr inż. Andrzej Grosser Cz estochowa, 2016 2 Spis treści 1. Zadanie 3 5 1.1. Wprowadzenie.................................. 5 1.2. Obiekty funkcyjne................................
Standard C++0x (C++1x?) Marcin Świderski
Standard C++0x (C++1x?) Marcin Świderski sfider@students.mimuw.edu.pl O czym będzie mowa? Wytyczne komitetu standaryzacyjnego Rozszerzenia języka Rozszerzenia języka szablony Rozszerzenia biblioteki standardowej
Programowanie obiektowe
Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych
Zaawansowane programowanie w C++ (PCP)
Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania
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.
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. Pliki z rozwiązaniami projektu (wszystkie polecenia
Projektowanie klas c.d. Projektowanie klas przykład
Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej
Programowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Wstęp do programowania. Wykład 1
Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.
Język C++ wykład VIII
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,
Podstawy Programowania
Podstawy Programowania Monika Wrzosek Instytut Matematyki Uniwersytet Gdański Matematyka 2017/18 Monika Wrzosek (IM UG) Podstawy Programowania 1 / 119 Sprawy organizacyjne E-mail: mwrzosek@mat.ug.edu.pl
Obsługa wyjątków. Język C++ WW12
Obsługa wyjątków Pozwala zarządzać błędami wykonania w uporządkowany sposób. Umożliwia automatyczne wywołanie części kodu, funkcji, metod klas, który trzeba wykonać przy powstaniu błędów. try //blok try
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie
Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal
Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO Rozdział 1. Wybór i instalacja kompilatora języka Pascal 1.1. Współczesne wersje kompilatorów Pascala 1.2. Jak zainstalować
Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski
Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski dr Dariusz Wardowski, Instytut Matematyki i Informatyki PWSZ w Płocku 1 O mnie prowadzący wykład i laboratoria: Dariusz Wardowski pokój: 102
Składnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory
Wstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 5 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przestrzenie nazw Standardowa biblioteka szablonów
Smarty PHP. Leksykon kieszonkowy
IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Wprowadzenie do szablonów szablony funkcji
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
JAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Wprowadzenie do szablonów szablony funkcji
Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do
Boost, Metaprogramowanie, Inne biblioteki
Boost, Metaprogramowanie, Inne biblioteki Biblioteka STL Sebastian Deorowicz Politechnika Śląska 2006 11-20 Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki 2006 11-20 1 / 38 Plan wykładu
Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17
Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8
Wstęp do programowania
wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych
Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.
Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using
Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.
Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
ZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
STL Standardt Template Library (wprowadzenie)
STL Standardt Template Library (wprowadzenie) Biblioteka standardowych szablonów na dzień dzisiejszy stanowi jedną z najpotężniejszych możliwości języka C++ Zawiera szablony klas ogólnego przeznaczenia
Podstawy Programowania
Podstawy Programowania dr Elżbieta Gawrońska gawronska@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 01 1 / 9 Plan wykładu 1 Informacje
Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska
Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania
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 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
Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.
Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody
Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw
Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej
Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;
Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze
Programowanie - wykład 4
Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include
Interfejsy i klasy wewnętrzne
Interfejsy i klasy wewnętrzne mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Interfejs klasy sposób komunikacji z jej obiektami (zestaw składowych publicznych). Określa on zestaw
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 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe
Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]
1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie
Programowanie obiektowe W3
Programowanie obiektowe W3 Przegląd typów strukturalnych w C++ : tablice statyczne i dynamiczne Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki Typy złożone: tablice
Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
DYNAMICZNE PRZYDZIELANIE PAMIECI
DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne
Przesłanianie nazw, przestrzenie nazw
Przesłanianie nazw, przestrzenie nazw Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Programowanie obiektowe, wykład nr 6. Klasy i obiekty
Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto
Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Szablony. Szablony funkcji
Szablony Szablony sa mechanizmem ponownego wykorzystania kodu (reuse) W przypadku funkcji ponownie wykorzystany jest algorytm W przypadku klas ponownie wykorzystane sa wszystkie skladowe Deklaracja szablonu
Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje
Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 4 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w
Język C zajęcia nr 11. Funkcje
Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji
TEMAT : KLASY POLIMORFIZM
TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie
Operatory na rzecz typu TString
Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t
Programowanie obiektowe
Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;
Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne
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 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane
Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40
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. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop
Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop. 2010 Spis treści Wstęp 11 Część I PASCAL - wprowadzenie do programowania strukturalnego
Programowanie Komponentowe Zarządzanie obiektami: kontenery
Programowanie Komponentowe Zarządzanie obiektami: kontenery dr inż. Ireneusz Szcześniak jesień 2016 roku Kontenery Kontener w C++ to generyczna struktura danych. Przechowuje elementy jednego dowolnego
Programowanie w języku C++
Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.
Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class
Kurs programowania. Wykład 9. Wojciech Macyna
Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy
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 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:
Podstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac