Technologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz.

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

Download "Technologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz."

Transkrypt

1 Technologie programowania Wykład 4 Przemek Błaśkiewicz 9 maja / 54 Szablony funkcji Często w programach zachodzi potrzeba użycia funkcji, które co do mechanizmu działaja tak samo, ale różnia się tylko typem parametrów. Kompilator C++ pozwala na stworzenie szablonu funkcji, gdzie parametrem moga być typy danych. Programista koduje przepis na tworzenie rodziny funkcji różniacych się tylko typami parametrów. oszczędność pracy programisty, nie kodu! w prostych programach umieszczane w.cpp, w bardziej złożonych - w.h 2 / 54 Szablony funkcji Często w programach zachodzi potrzeba użycia funkcji, które co do mechanizmu działaja tak samo, ale różnia się tylko typem parametrów. Kompilator C++ pozwala na stworzenie szablonu funkcji, gdzie parametrem moga być typy danych. Programista koduje przepis na tworzenie rodziny funkcji różniacych się tylko typami parametrów. oszczędność pracy programisty, nie kodu! w prostych programach umieszczane w.cpp, w bardziej złożonych - w.h 3 / 54 Szablony funkcji Często w programach zachodzi potrzeba użycia funkcji, które co do mechanizmu działaja tak samo, ale różnia się tylko typem parametrów. Kompilator C++ pozwala na stworzenie szablonu funkcji, gdzie parametrem moga być typy danych. Programista koduje przepis na tworzenie rodziny funkcji różniacych się tylko typami parametrów. oszczędność pracy programisty, nie kodu! w prostych programach umieszczane w.cpp, w bardziej złożonych - w.h 4 / 54

2 Szablony funkcji Często w programach zachodzi potrzeba użycia funkcji, które co do mechanizmu działaja tak samo, ale różnia się tylko typem parametrów. Kompilator C++ pozwala na stworzenie szablonu funkcji, gdzie parametrem moga być typy danych. Programista koduje przepis na tworzenie rodziny funkcji różniacych się tylko typami parametrów. oszczędność pracy programisty, nie kodu! w prostych programach umieszczane w.cpp, w bardziej złożonych - w.h 5 / 54 Przykład funkcji szablonowej Zamiana wartości 2 void swap (T &a, T &b) { 3 T temp ; 4 temp = a; a = b; b = temp ; 5 } Kompilator interpretuje... 1 // T oznacza int 2 void swap ( int a, int b) { 3 int temp ; 4 temp = a; a = b; b = temp ; 5 } 6 / 54 Przykład funkcji szablonowej Zamiana wartości 2 void swap (T &a, T &b) { 3 T temp ; 4 temp = a; a = b; b = temp ; 5 } Kompilator interpretuje... 1 // T oznacza int 2 void swap ( int a, int b) { 3 int temp ; 4 temp = a; a = b; b = temp ; 5 } 7 / 54 Parametry funkcji szablonowej generowanie skonkretyzowanej funkcji zależy tylko od typu parametrów, a nie od typu zwracanego parametrem szablonu może być dowolny typ danych (wbudowany, klasa), pod warunkiem, że zachowanie się funkcji dla konkretnego typu jest zdefiniowane dla pewnych przypadków kompilator dorabia funkcjonalności dla typów wbudowanych (przykład) możliwe jest użycie większej ilości parametrów: template <class T1, class T2> void do(t1 a, T2 b); jeśli typem kolejnego argumentu jest typ pochodny od już zadeklarowanego (wskaźnik, referencja) - nie ma potrzeby jego deklaracji: template <class T> void abc(t a, T[ ] b); 8 / 54

3 Parametry funkcji szablonowej generowanie skonkretyzowanej funkcji zależy tylko od typu parametrów, a nie od typu zwracanego parametrem szablonu może być dowolny typ danych (wbudowany, klasa), pod warunkiem, że zachowanie się funkcji dla konkretnego typu jest zdefiniowane dla pewnych przypadków kompilator dorabia funkcjonalności dla typów wbudowanych (przykład) możliwe jest użycie większej ilości parametrów: template <class T1, class T2> void do(t1 a, T2 b); jeśli typem kolejnego argumentu jest typ pochodny od już zadeklarowanego (wskaźnik, referencja) - nie ma potrzeby jego deklaracji: template <class T> void abc(t a, T[ ] b); 9 / 54 Parametry funkcji szablonowej generowanie skonkretyzowanej funkcji zależy tylko od typu parametrów, a nie od typu zwracanego parametrem szablonu może być dowolny typ danych (wbudowany, klasa), pod warunkiem, że zachowanie się funkcji dla konkretnego typu jest zdefiniowane dla pewnych przypadków kompilator dorabia funkcjonalności dla typów wbudowanych (przykład) możliwe jest użycie większej ilości parametrów: template <class T1, class T2> void do(t1 a, T2 b); jeśli typem kolejnego argumentu jest typ pochodny od już zadeklarowanego (wskaźnik, referencja) - nie ma potrzeby jego deklaracji: template <class T> void abc(t a, T[ ] b); 10 / 54 Parametry funkcji szablonowej generowanie skonkretyzowanej funkcji zależy tylko od typu parametrów, a nie od typu zwracanego parametrem szablonu może być dowolny typ danych (wbudowany, klasa), pod warunkiem, że zachowanie się funkcji dla konkretnego typu jest zdefiniowane dla pewnych przypadków kompilator dorabia funkcjonalności dla typów wbudowanych (przykład) możliwe jest użycie większej ilości parametrów: template <class T1, class T2> void do(t1 a, T2 b); jeśli typem kolejnego argumentu jest typ pochodny od już zadeklarowanego (wskaźnik, referencja) - nie ma potrzeby jego deklaracji: template <class T> void abc(t a, T[ ] b); 11 / 54 Parametry funkcji szablonowej generowanie skonkretyzowanej funkcji zależy tylko od typu parametrów, a nie od typu zwracanego parametrem szablonu może być dowolny typ danych (wbudowany, klasa), pod warunkiem, że zachowanie się funkcji dla konkretnego typu jest zdefiniowane dla pewnych przypadków kompilator dorabia funkcjonalności dla typów wbudowanych (przykład) możliwe jest użycie większej ilości parametrów: template <class T1, class T2> void do(t1 a, T2 b); jeśli typem kolejnego argumentu jest typ pochodny od już zadeklarowanego (wskaźnik, referencja) - nie ma potrzeby jego deklaracji: template <class T> void abc(t a, T[ ] b); 12 / 54

4 Właściwości funkcji szablonowej zmienna static pozostaje właściwa dla konkretnej instancji szablonu (przykład) szablon funkcji nie powinien korzystać ze zmiennych globalnych w przypadku, gdy ogólny opis funkcji szablonowej wymaga modyfikacji dla konkretnych parametrów stosuje się funkcję specjalizowana 2 T max ( const T a, const T b) { 3 return (a > b)? a : b; } 1 // funkcja specjalna dla T = char * 2 char * max ( const char *a, const char *b) { 3 return ( strlen (a) > strlen (b) )? a : b; } 13 / 54 Właściwości funkcji szablonowej zmienna static pozostaje właściwa dla konkretnej instancji szablonu (przykład) szablon funkcji nie powinien korzystać ze zmiennych globalnych w przypadku, gdy ogólny opis funkcji szablonowej wymaga modyfikacji dla konkretnych parametrów stosuje się funkcję specjalizowana 2 T max ( const T a, const T b) { 3 return (a > b)? a : b; } 1 // funkcja specjalna dla T = char * 2 char * max ( const char *a, const char *b) { 3 return ( strlen (a) > strlen (b) )? a : b; } 14 / 54 Właściwości funkcji szablonowej zmienna static pozostaje właściwa dla konkretnej instancji szablonu (przykład) szablon funkcji nie powinien korzystać ze zmiennych globalnych w przypadku, gdy ogólny opis funkcji szablonowej wymaga modyfikacji dla konkretnych parametrów stosuje się funkcję specjalizowana 2 T max ( const T a, const T b) { 3 return (a > b)? a : b; } 1 // funkcja specjalna dla T = char * 2 char * max ( const char *a, const char *b) { 3 return ( strlen (a) > strlen (b) )? a : b; } 15 / 54 Właściwości funkcji szablonowej zmienna static pozostaje właściwa dla konkretnej instancji szablonu (przykład) szablon funkcji nie powinien korzystać ze zmiennych globalnych w przypadku, gdy ogólny opis funkcji szablonowej wymaga modyfikacji dla konkretnych parametrów stosuje się funkcję specjalizowana 2 T max ( const T a, const T b) { 3 return (a > b)? a : b; } 1 // funkcja specjalna dla T = char * 2 char * max ( const char *a, const char *b) { 3 return ( strlen (a) > strlen (b) )? a : b; } 16 / 54

5 Właściwości funkcji szablonowej zmienna static pozostaje właściwa dla konkretnej instancji szablonu (przykład) szablon funkcji nie powinien korzystać ze zmiennych globalnych w przypadku, gdy ogólny opis funkcji szablonowej wymaga modyfikacji dla konkretnych parametrów stosuje się funkcję specjalizowana 2 T max ( const T a, const T b) { 3 return (a > b)? a : b; } 1 // funkcja specjalna dla T = char * 2 char * max ( const char *a, const char *b) { 3 return ( strlen (a) > strlen (b) )? a : b; } 17 / 54 Właściwości funkcji szablonowej zmienna static pozostaje właściwa dla konkretnej instancji szablonu (przykład) szablon funkcji nie powinien korzystać ze zmiennych globalnych w przypadku, gdy ogólny opis funkcji szablonowej wymaga modyfikacji dla konkretnych parametrów stosuje się funkcję specjalizowana 2 T max ( const T a, const T b) { 3 return (a > b)? a : b; } 1 // funkcja specjalna dla T = char * 2 char * max ( const char *a, const char *b) { 3 return ( strlen (a) > strlen (b) )? a : b; } 18 / 54 Funkcje szablonowe podsumowanie pozwalaja na skrócenie pracy nad podobnymi funkcjonalnościami praca przerzucona na kompilator i linker programista odpowiedzialny za sens implementacji szablonu nie wykluczaja dosłownej definicji funkcji dla konkretnych typów Ale funkcje szablonowe to nie wszystko / 54 Funkcje szablonowe podsumowanie pozwalaja na skrócenie pracy nad podobnymi funkcjonalnościami praca przerzucona na kompilator i linker programista odpowiedzialny za sens implementacji szablonu nie wykluczaja dosłownej definicji funkcji dla konkretnych typów Ale funkcje szablonowe to nie wszystko / 54

6 Klasy szablonowe Tak jak w przypadku funkcji, w programach często pojawiaja się przypadki klas, które różnia się jedynie typami danych, jakie obsługuja. Najczęstszym przypadkiem tego rodzaju jest ten, gdzie potrzebujemy sposobu na przechowywanie elementów (obiektów) w dowolnej, nie znanej z góry ilości. Kontenery W językach obiektowych kontenery służa do przechowywania (dynamicznie) tworzonych obiektów, grupowania ich w logiczne struktury. 21 / 54 Klasy szablonowe Tak jak w przypadku funkcji, w programach często pojawiaja się przypadki klas, które różnia się jedynie typami danych, jakie obsługuja. Najczęstszym przypadkiem tego rodzaju jest ten, gdzie potrzebujemy sposobu na przechowywanie elementów (obiektów) w dowolnej, nie znanej z góry ilości. Kontenery W językach obiektowych kontenery służa do przechowywania (dynamicznie) tworzonych obiektów, grupowania ich w logiczne struktury. 22 / 54 Klasy szablonowe Tak jak w przypadku funkcji, w programach często pojawiaja się przypadki klas, które różnia się jedynie typami danych, jakie obsługuja. Najczęstszym przypadkiem tego rodzaju jest ten, gdzie potrzebujemy sposobu na przechowywanie elementów (obiektów) w dowolnej, nie znanej z góry ilości. Kontenery W językach obiektowych kontenery służa do przechowywania (dynamicznie) tworzonych obiektów, grupowania ich w logiczne struktury. 23 / 54 Klasy parametryzowane typami W językach obiektowych można definiować klasy uogólnione zawierajace pola, których typy sa parametrami, tzw. szablony klas (np. klasy z Standard Template Library). Parametry typów podaje się w nawiasach (<>) po nazwie klasy, odzielajac je od siebie przecinkami. Typem uogólnionym może być klasa, struktura, typ prosty czy inny typ uogólniony. Typem nie jest klasa parametryzowana ale dopiero jej ukonkretnienie z podanymi konkretnymi parametrami. Rozwiazania przyjęte w C++ sprawdzaja poprawność szablonu w większości dopiero podczas kompilacji konkretnej instancji szablonu. 24 / 54

7 Klasy parametryzowane typami W językach obiektowych można definiować klasy uogólnione zawierajace pola, których typy sa parametrami, tzw. szablony klas (np. klasy z Standard Template Library). Parametry typów podaje się w nawiasach (<>) po nazwie klasy, odzielajac je od siebie przecinkami. Typem uogólnionym może być klasa, struktura, typ prosty czy inny typ uogólniony. Typem nie jest klasa parametryzowana ale dopiero jej ukonkretnienie z podanymi konkretnymi parametrami. Rozwiazania przyjęte w C++ sprawdzaja poprawność szablonu w większości dopiero podczas kompilacji konkretnej instancji szablonu. 25 / 54 Klasy parametryzowane typami W językach obiektowych można definiować klasy uogólnione zawierajace pola, których typy sa parametrami, tzw. szablony klas (np. klasy z Standard Template Library). Parametry typów podaje się w nawiasach (<>) po nazwie klasy, odzielajac je od siebie przecinkami. Typem uogólnionym może być klasa, struktura, typ prosty czy inny typ uogólniony. Typem nie jest klasa parametryzowana ale dopiero jej ukonkretnienie z podanymi konkretnymi parametrami. Rozwiazania przyjęte w C++ sprawdzaja poprawność szablonu w większości dopiero podczas kompilacji konkretnej instancji szablonu. 26 / 54 Klasy parametryzowane typami W językach obiektowych można definiować klasy uogólnione zawierajace pola, których typy sa parametrami, tzw. szablony klas (np. klasy z Standard Template Library). Parametry typów podaje się w nawiasach (<>) po nazwie klasy, odzielajac je od siebie przecinkami. Typem uogólnionym może być klasa, struktura, typ prosty czy inny typ uogólniony. Typem nie jest klasa parametryzowana ale dopiero jej ukonkretnienie z podanymi konkretnymi parametrami. Rozwiazania przyjęte w C++ sprawdzaja poprawność szablonu w większości dopiero podczas kompilacji konkretnej instancji szablonu. 27 / 54 Klasy parametryzowane typami W językach obiektowych można definiować klasy uogólnione zawierajace pola, których typy sa parametrami, tzw. szablony klas (np. klasy z Standard Template Library). Parametry typów podaje się w nawiasach (<>) po nazwie klasy, odzielajac je od siebie przecinkami. Typem uogólnionym może być klasa, struktura, typ prosty czy inny typ uogólniony. Typem nie jest klasa parametryzowana ale dopiero jej ukonkretnienie z podanymi konkretnymi parametrami. Rozwiazania przyjęte w C++ sprawdzaja poprawność szablonu w większości dopiero podczas kompilacji konkretnej instancji szablonu. 28 / 54

8 Deklarowanie szablonu Słowo kluczowe template 2 class Keep { 3 T storage ; 4 public : 5 void hide (T thing ) { storage = thing ; } 6 T give () { return storage ; } 7 }; Konkretyzacja szablonu 1 Keep <int > a; 2 Keep <string > b; 29 / 54 Deklarowanie szablonu Słowo kluczowe template 2 class Keep { 3 T storage ; 4 public : 5 void hide (T thing ) { storage = thing ; } 6 T give () { return storage ; } 7 }; Konkretyzacja szablonu 1 Keep <int > a; 2 Keep <string > b; 30 / 54 Przykład stos.cpp 1 template <typename T> class ElemStosu { 2 public : 3 T elem ; 4 ElemStosu <T>* nast ; 5 ElemStosu (T elem, ElemStosu <T>* nast ) { 6 this ->elem = elem ; 7 this ->nast = nast ; 8 } 9 }; 10 template <typename T> class Stos { 11 private : 12 ElemStosu <T>* wierzch ; 13 public : 14 Stos () { wierzch = NULL ; } 15 bool empty () { return wierzch == NULL ; } 16 void push (T elem ) { wierzch = new ElemStosu <T>( elem, wierzch ); } 17 T pop () { 18 if( empty () ) throw ( string )" PustyStos!"; 19 T wynik = wierzch ->elem ; 20 wierzch = wierzch ->nast ; 21 return wynik ; 22 } 23 }; 31 / 54 Przykład stos.cpp (cd) 24 int main ( int argc, char * argv []) { 25 Stos <int > a; 26 Stos <string > b; 27 a. push (2); a. push (3); 28 try { 29 cout << a. pop () << " " << a. pop () << endl ; 30 cout << a. pop () << " " << a. pop () << endl ; 31 } 32 catch ( string e) { 33 cout << e << endl ; 34 } 35 b. push (" Maciek "); b. push (" Ala "); 36 try { 37 while (!b. empty () ) 38 cout << b. pop () << endl ; 39 } 40 catch ( string e) { 41 cout << e << endl ; 42 } 43 } 32 / 54

9 Inne przykłady 1 shelf < book * > a; // na fiszki 2 shelf < book [3] > b; // na trylogie 3 shelf < Stos <book > > c; // na balagan 4 shelf < shelf <book > > d; // regal 33 / 54 Parametry szablonu klas Parametrem szablonu może być: nazwa typu wartość całkowita: template <class T, int size = 10> class Arr { T a[size] ;... }; adres obiektu globalnego adres funkcji globalnej: template <class T, int(*ptr)(t,t) > class Sorter {... }; adres statycznego pola lub funkcji klasy 34 / 54 Parametry szablonu klas Parametrem szablonu może być: nazwa typu wartość całkowita: template <class T, int size = 10> class Arr { T a[size] ;... }; adres obiektu globalnego adres funkcji globalnej: template <class T, int(*ptr)(t,t) > class Sorter {... }; adres statycznego pola lub funkcji klasy 35 / 54 Parametry szablonu klas Parametrem szablonu może być: nazwa typu wartość całkowita: template <class T, int size = 10> class Arr { T a[size] ;... }; adres obiektu globalnego adres funkcji globalnej: template <class T, int(*ptr)(t,t) > class Sorter {... }; adres statycznego pola lub funkcji klasy 36 / 54

10 Parametry szablonu klas Parametrem szablonu może być: nazwa typu wartość całkowita: template <class T, int size = 10> class Arr { T a[size] ;... }; adres obiektu globalnego adres funkcji globalnej: template <class T, int(*ptr)(t,t) > class Sorter {... }; adres statycznego pola lub funkcji klasy 37 / 54 Parametry szablonu klas Parametrem szablonu może być: nazwa typu wartość całkowita: template <class T, int size = 10> class Arr { T a[size] ;... }; adres obiektu globalnego adres funkcji globalnej: template <class T, int(*ptr)(t,t) > class Sorter {... }; adres statycznego pola lub funkcji klasy 38 / 54 Pomocnik: słowo typedef Tworzenie złożonych szablonów prowadzi do bardzo skomplikowanych definicji typów danych, np.: 1 zestaw < shelf <book, int >, 2 sizeof ( book )*1024, browserfun > biblioteka ; Wyobraźmy sobie deklarację funkcji odwiedz( ) dla takiej biblioteki, albo porownaj( ) sprawdzajacej co jest w jednej, a co w drugiej i... zwracajacej nowa bibliotekę! Wprowadzamy nowy typ 1 typedef 2 zestaw < shelf <book, int >, 3 sizeof ( book )*1024, 4 browsefun > 5 bib ; 6 void odwiedz ( bib ); 7 bib porownaj (bib, bib ); 39 / 54 Pomocnik: słowo typedef Tworzenie złożonych szablonów prowadzi do bardzo skomplikowanych definicji typów danych, np.: 1 zestaw < shelf <book, int >, 2 sizeof ( book )*1024, browserfun > biblioteka ; Wyobraźmy sobie deklarację funkcji odwiedz( ) dla takiej biblioteki, albo porownaj( ) sprawdzajacej co jest w jednej, a co w drugiej i... zwracajacej nowa bibliotekę! Wprowadzamy nowy typ 1 typedef 2 zestaw < shelf <book, int >, 3 sizeof ( book )*1024, 4 browsefun > 5 bib ; 6 void odwiedz ( bib ); 7 bib porownaj (bib, bib ); 40 / 54

11 Pomocnik: słowo typedef Tworzenie złożonych szablonów prowadzi do bardzo skomplikowanych definicji typów danych, np.: 1 zestaw < shelf <book, int >, 2 sizeof ( book )*1024, browserfun > biblioteka ; Wyobraźmy sobie deklarację funkcji odwiedz( ) dla takiej biblioteki, albo porownaj( ) sprawdzajacej co jest w jednej, a co w drugiej i... zwracajacej nowa bibliotekę! Wprowadzamy nowy typ 1 typedef 2 zestaw < shelf <book, int >, 3 sizeof ( book )*1024, 4 browsefun > 5 bib ; 6 void odwiedz ( bib ); 7 bib porownaj (bib, bib ); 41 / 54 Zastosowania szablonów Zalety Wady Tworzenie klas które przechowuja inne obiekty (kontenery), np. tablice, kolejki, stosy, listy... Łatwe tworzenie klas które posługuja się innymi typami danych (alternatywa do pisania wielokrotnie podobnego kodu dla różnych typów danych). Krótszy łatwiejszy kod, operacje bezpieczniejsze niż rzutowanie typów. Kiepska diagnostyka błędów błędy sa często zgłaszane dopiero po konkretyzacji danego szablonu, najczęściej oznajmiajac, że pewne operacje sa niemożliwe dla konkretnego typu (sam szablon nie sprawdza poprawności użycia typu uogólnionego). 42 / 54 Zastosowania szablonów Zalety Wady Tworzenie klas które przechowuja inne obiekty (kontenery), np. tablice, kolejki, stosy, listy... Łatwe tworzenie klas które posługuja się innymi typami danych (alternatywa do pisania wielokrotnie podobnego kodu dla różnych typów danych). Krótszy łatwiejszy kod, operacje bezpieczniejsze niż rzutowanie typów. Kiepska diagnostyka błędów błędy sa często zgłaszane dopiero po konkretyzacji danego szablonu, najczęściej oznajmiajac, że pewne operacje sa niemożliwe dla konkretnego typu (sam szablon nie sprawdza poprawności użycia typu uogólnionego). 43 / 54 Standard Template Library Idea Biblioteka grupujaca klasy (kolekcje) przechowujace/manipuluj ace jakimiś elementami (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista, mapa czy wektor (tablica). Składniki Kontenery - implementacje klas. Algorytmy - operuja na danych ale nie sa zależne od kontenera Iteratory - metody przechodzenia po elementach kontenerów. Kontenery i algorytmy najcześciej współpracuja ze soba za pomoca iteratorów. Pełna dokumentacja 44 / 54

12 Standard Template Library Idea Biblioteka grupujaca klasy (kolekcje) przechowujace/manipuluj ace jakimiś elementami (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista, mapa czy wektor (tablica). Składniki Kontenery - implementacje klas. Algorytmy - operuja na danych ale nie sa zależne od kontenera Iteratory - metody przechodzenia po elementach kontenerów. Kontenery i algorytmy najcześciej współpracuja ze soba za pomoca iteratorów. Pełna dokumentacja 45 / 54 Standard Template Library Idea Biblioteka grupujaca klasy (kolekcje) przechowujace/manipuluj ace jakimiś elementami (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista, mapa czy wektor (tablica). Składniki Kontenery - implementacje klas. Algorytmy - operuja na danych ale nie sa zależne od kontenera Iteratory - metody przechodzenia po elementach kontenerów. Kontenery i algorytmy najcześciej współpracuja ze soba za pomoca iteratorów. Pełna dokumentacja 46 / 54 Kontenery vector uogólnienie tablicy (dynamiczny rozmiar, dodawanie/usuwanie elementów na końcu/poczatku,...) list implementacja listy/stosu (pokrywa się częściowo z vector, ale dla zastosowań typowo listowych ma szybsza implementację) deque implementacja kolejki (podobnie jak list) set, multiset, hash_set, hash_multiset implementacja zbiorów/multizbiorów map, multimap, hash_map, hash_multimap implementacja odwzorowań funkcyjnych Kontenery odzwierciedlaja pewne konkretne struktury danych używane powszechnie w algorytmach/programach. 47 / 54 Kontenery vector uogólnienie tablicy (dynamiczny rozmiar, dodawanie/usuwanie elementów na końcu/poczatku,...) list implementacja listy/stosu (pokrywa się częściowo z vector, ale dla zastosowań typowo listowych ma szybsza implementację) deque implementacja kolejki (podobnie jak list) set, multiset, hash_set, hash_multiset implementacja zbiorów/multizbiorów map, multimap, hash_map, hash_multimap implementacja odwzorowań funkcyjnych Kontenery odzwierciedlaja pewne konkretne struktury danych używane powszechnie w algorytmach/programach. 48 / 54

13 Algorytmy i iteratory Podstawowe algorytmy sort uporzadkowanie elementów (jeśli maja porzadek) find szukanie elementu copy kopiowanie struktury generate generowanie struktury o określonych własnościach max, min znajdowanie elementu minimalnego/maksymalnego... Nie wszystkie algorytmy stosuja się do wszystkich kontenerów (np. sortowanie zbioru nie ma sensu). Iteratory Klasy umożliwiajace przechodzenie po elementach kolekcji wskazujace element z kolekcji (np. begin(), end()) 49 / 54 Algorytmy i iteratory Podstawowe algorytmy sort uporzadkowanie elementów (jeśli maja porzadek) find szukanie elementu copy kopiowanie struktury generate generowanie struktury o określonych własnościach max, min znajdowanie elementu minimalnego/maksymalnego... Nie wszystkie algorytmy stosuja się do wszystkich kontenerów (np. sortowanie zbioru nie ma sensu). Iteratory Klasy umożliwiajace przechodzenie po elementach kolekcji wskazujace element z kolekcji (np. begin(), end()) 50 / 54 Przykład lista.cpp 1 # include <iostream > 2 # include <list > 3 # include <string > 4 using namespace std ; 5 int main ( int argc, char * argv []) { 6 list <string > * nazwiska = new list <string >(); 7 nazwiska ->push_back (" Nowak "); nazwiska ->push_back (" Kowalski "); 8 nazwiska ->push_back (" Bielecki "); nazwiska ->push_back (" Adamski "); 9 nazwiska ->push_back (" Kowalski "); 10 list <string >:: iterator it; 11 for (it=nazwiska ->begin (); it!=nazwiska ->end (); it++) 12 cout << " - " << *it << endl ; 13 nazwiska ->sort (); 14 for (it=nazwiska ->begin (); it!=nazwiska ->end (); it++) 15 cout << " + " << *it << endl ; 16 nazwiska ->reverse (); 17 for (it=nazwiska ->begin (); it!=nazwiska ->end (); it++) 18 cout << " - " << *it << endl ; 19 nazwiska ->remove (" Kowalski "); 20 for (it=nazwiska ->begin (); it!=nazwiska ->end (); it++) 21 cout << " + " << *it << endl ; 22 delete ( nazwiska ); 23 } 51 / 54 Implementacja iteratora Przykład: Thinking in C++, vol / 54

14 Dodatkowe biblioteki szablonów Boost Microsoft 53 / 54 Dodatkowe biblioteki szablonów Boost Microsoft 54 / 54

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

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

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

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

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

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

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

Bardziej szczegółowo

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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły

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

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

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

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 7 Katarzyna Grzelak 23 kwietnia 2018 K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40 Standard Template Library (STL) K.Grzelak (Wykład 7) Programowanie w C++ 2 / 40 C++ Templates

Bardziej szczegółowo

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

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Kontenery - - wektor vector - - lista list - - kolejka queue - - stos stack Kontener asocjacyjny map 2016-01-08 Bazy danych-1 W5 1 Kontenery W programowaniu

Bardziej szczegółowo

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019 Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości

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

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

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

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

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

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

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

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

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

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

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

Wprowadzenie do szablonów klas

Wprowadzenie do szablonów 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 2008-2010 Bogdan Kreczmer Niniejszy

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

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

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

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Standard Template Library. Część 1. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych.

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

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

Paradygmaty programowania. Paradygmaty programowania

Paradygmaty programowania. Paradygmaty programowania Paradygmaty programowania Paradygmaty programowania Dr inż. Andrzej Grosser Cz estochowa, 2013 2 Spis treści 1. Zadanie 2 5 1.1. Wprowadzenie.................................. 5 1.2. Wskazówki do zadania..............................

Bardziej szczegółowo

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

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce. Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Programowanie obiektowe. Wykład 5. C++: szablony

Programowanie obiektowe. Wykład 5. C++: szablony Programowanie obiektowe Wykład 5. C++: szablony Szablony Szablony to technika realizacji polimorfizmu na innym poziomie niż za pomocą funkcji wirtualnych i dziedziczenia. Mechanizm ten można rozumieć jako

Bardziej szczegółowo

Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór

Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór Klasy generyczne Klasy generyczne Klasy generyczne są to klasy o parametryzowanych typach danych. Klasy generyczne posiadają kompletną implementację, jednak nie definiują typów danych wykorzystanych w

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

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

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

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 Przeciążanie operatorów Słowo

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

Język C++ część 9 szablony klas. Jarosław Gramacki Instytut Informatyki i Elektroniki. szablony funkcji

Język C++ część 9 szablony klas. Jarosław Gramacki Instytut Informatyki i Elektroniki. szablony funkcji Język C++ część 9 szablony klas Jarosław Gramacki Instytut Informatyki i Elektroniki szablony funkcji były omawiane na wcześniejszym wykładzie nazewnictwo: szablon funkcji wzorzec funkcji 2 szablony

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

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

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

Wyjątki (exceptions)

Wyjątki (exceptions) Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.

Bardziej szczegółowo

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: Wskaźniki nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja

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

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

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2 ( $%%) )'20 )*0) 1 / ) Jzyk C++ cz 3 Jarosław Gramacki Instytut Informatyki i Elektroniki # $$%%& ' ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )!" 2 # $$%%& ' ( $%%/,))3 ( %* 2 / 4 ( ( *' *''*,

Bardziej szczegółowo

Abstrakcyjny typ danych

Abstrakcyjny typ danych Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są

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

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.

Bardziej szczegółowo

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

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE

Bardziej szczegółowo

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ w C Zak lad Chemii Teoretycznej UJ 30 listopada 2006 1 2 3 Inicjalizacja zmiennych Zmienne jednowymiarowe można inicjować przy ich definicji. #include i n t x = 1 ; l o n g day = 1000L * 60L

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 4 Funkcje przeciażone - Idea Przeciażanie funkcji (polimorfizm funkcji), to kolejna nowość w języku

Bardziej szczegółowo

Wykład 3 Składnia języka C# (cz. 2)

Wykład 3 Składnia języka C# (cz. 2) Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest

Bardziej szczegółowo

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

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

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

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this

Bardziej szczegółowo

Stos liczb całkowitych

Stos liczb całkowitych Stos liczb całkowitych class StosInt int* tab; unsigned size ; StosInt(unsigned s=10) tab=new int[size=s];top=0; ~StosInt()delete[] tab; void push(int i)tab[top++]=i; int pop(void) return tab[--top]; int

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

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

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

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Literatura Języki i paradygmaty programowania Wykład 2 1. C. S. Horstman, G. Cornell, core Java 2 Podstawy, Helion 2003

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

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

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie

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

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

Wstęp do programowania obiektowego, wykład 7

Wstęp do programowania obiektowego, wykład 7 Wstęp do programowania obiektowego, wykład 7 Klasy i funkcje abstrakcyjne Przeciążanie funkcji Definiowanie i interpretacja złożonych typów danych w C++ Wskaźniki do funkcji 1 KLASA ABSTRAKCYJNA 2 Klasa

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

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

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski. - - uzupełnienie notatek: dr Jerzy Białkowski - - 1-2 - - - 1 #include 2 #include 3 # include 4 using namespace std ; 5 6 class Punkt { 7 8 private : 9 double

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

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

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje Zbudujemy klasę Definicję klasy zapiszmy w pliku tstring.h #ifndef TSTRING_H #define TSTRING_H #include // w pliku nagłówkowym NIE // otwieramy przestrzeni std // interfejs private: // implementacja

Bardziej szczegółowo

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy 2.4 Dziedziczenie Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładach programów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo aby napisać

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie

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

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

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

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów

Bardziej szczegółowo

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119 Tablice Tablica to struktura danych, która może przechowywać wiele wartości tego samego typu. Na przykład tablica może zawierać: 10 wartości typu int opisujących liczbę studentów przyjętych na kierunek

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

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

Programowanie 2. Język C++. Wykład 2. 2.1 Definicja, deklaracja, wywołanie funkcji.... 1 2.2 Funkcje inline... 4 2.3 Przekazanie do argumentu funkcji wartości, adresu zmiennej.... 5 2.4 Wskaźniki do funkcji... 8 2.5 Przeładowanie funkcji...

Bardziej szczegółowo

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

W przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast Wykład 12 - Biblioteka stadardowa.sxw 1 Przegląd biblioteki standardowej C++; W porównaniu z pierwszymi implementacjami i specyfikacjami C++ biblioteka standardowa języka C++ bardzo się rozrosła, a w latach

Bardziej szczegółowo

Rzutowanie i konwersje

Rzutowanie i konwersje Rzutowanie i konwersje 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 na temat programowania

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

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1) Programowanie Obiektowe (język C++) Wykład 10. FUNKCJE WZORCOWE Funkcje wzorcowe wprowadzenie (1) Funkcje wzorcowe wprowadzenie (2) int max ( int a, int b ) return a>b? a : b; Aby mieć analogiczną funkcję

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

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

obiekty funkcyjne - funktory

obiekty funkcyjne - funktory #include #include #include #include #include #include #include #include #include #include using namespace

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 2. Język C++. Wykład 3.

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

10.1 Szablony... 1 10.2 Szablony funkcji... 2 10.3 Szablony klas... 5 10.4 Szablony jako wstęp do biblioteki STL... 10

10.1 Szablony... 1 10.2 Szablony funkcji... 2 10.3 Szablony klas... 5 10.4 Szablony jako wstęp do biblioteki STL... 10 .1 Szablony... 1.2 Szablony funkcji... 2.3 Szablony klas....4 Szablony jako wstęp do biblioteki STL....1 Szablony Szablony definiują sparametryzowane rodziny klas, funkcji. Szablony deklarujemy i definiujemy

Bardziej szczegółowo