Iteratory, Alokatory, Przyszłość C++, Boost

Wielkość: px
Rozpocząć pokaz od strony:

Download "Iteratory, Alokatory, Przyszłość C++, Boost"

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.:

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,

Bardziej szczegółowo

Szablony funkcji i szablony klas

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

Bardziej szczegółowo

Część 4 życie programu

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ęść

Bardziej szczegółowo

Programowanie i struktury danych

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Szablony funkcji i klas (templates)

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

Bardziej szczegółowo

I - Microsoft Visual Studio C++

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

Bardziej szczegółowo

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

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;

Bardziej szczegółowo

Spis treści. Wprowadzenie 15

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...

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

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

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

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,

Bardziej szczegółowo

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

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)

Bardziej szczegółowo

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

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

Bardziej szczegółowo

STL: Lekcja 1&2. Filozofia STL

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.

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

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

Bardziej szczegółowo

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

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

Bardziej szczegółowo

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

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,

Bardziej szczegółowo

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

Bardziej szczegółowo

Technologie cyfrowe semestr letni 2018/2019

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

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

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,

Bardziej szczegółowo

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

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

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

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ą

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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 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 ()

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Biblioteka standardowa

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

Bardziej szczegółowo

Technologie cyfrowe semestr letni 2018/2019

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

Bardziej szczegółowo

Paradygmaty programowania

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................................

Bardziej szczegółowo

Standard C++0x (C++1x?) Marcin Świderski

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

Bardziej szczegółowo

Programowanie obiektowe

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

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

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

Bardziej szczegółowo

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. 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

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

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

Bardziej szczegółowo

Programowanie w języku C++

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

Bardziej szczegółowo

Wstęp do programowania. Wykład 1

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.

Bardziej szczegółowo

Język C++ wykład VIII

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,

Bardziej szczegółowo

Podstawy Programowania

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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 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ć

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wstęp do Programowania 2

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:

Bardziej szczegółowo

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

Bardziej szczegółowo

Smarty PHP. Leksykon kieszonkowy

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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 wykładu na temat programowania obiektowego.

Bardziej szczegółowo

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

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

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wykład 8: klasy cz. 4

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

Bardziej szczegółowo

Wprowadzenie do szablonów szablony funkcji

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

Bardziej szczegółowo

Boost, Metaprogramowanie, Inne biblioteki

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

Bardziej szczegółowo

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

Bardziej szczegółowo

Wstęp do programowania

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

Bardziej szczegółowo

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. 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

Bardziej szczegółowo

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

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.

Bardziej szczegółowo

Wykład 4: Klasy i Metody

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

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

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.

Bardziej szczegółowo

STL Standardt Template Library (wprowadzenie)

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

Bardziej szczegółowo

Podstawy Programowania

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie - wykład 4

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

Bardziej szczegółowo

Interfejsy i klasy wewnętrzne

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

Bardziej szczegółowo

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

Bardziej szczegółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

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

Bardziej szczegółowo

Programowanie obiektowe W3

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

Bardziej szczegółowo

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

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

Bardziej szczegółowo

Przesłanianie nazw, przestrzenie nazw

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Bardziej szczegółowo

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

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ę

Bardziej szczegółowo

Szablony. Szablony funkcji

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

Bardziej szczegółowo

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

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

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

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

Bardziej szczegółowo

TEMAT : KLASY POLIMORFIZM

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

Bardziej szczegółowo

Operatory na rzecz typu TString

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

Bardziej szczegółowo

Programowanie obiektowe

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;

Bardziej szczegółowo

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

Bardziej szczegółowo

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

Bardziej szczegółowo

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ń 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:

Bardziej szczegółowo

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ść 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

Bardziej szczegółowo

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

Bardziej szczegółowo

Programowanie Komponentowe Zarządzanie obiektami: kontenery

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

Bardziej szczegółowo

Programowanie w języku C++

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

Bardziej szczegółowo

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. 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

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna

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

Bardziej szczegółowo

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 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:

Bardziej szczegółowo

Podstawy Programowania Obiektowego

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo