Szablony, wybrane elementy biblioteki STL

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

Download "Szablony, wybrane elementy biblioteki STL"

Transkrypt

1 Bogdan Kreczmer Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2016 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową.

2 Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer:

3 Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 funkcji Podstawowa idea klas 3 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

4 Plan prezentacji Klasy z polami referencyjnymi Klasa std::string 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 funkcji Podstawowa idea klas 3 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

5 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; ; //

6 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; ; // int main( ) Wektor2 W1;

7 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; ; // int main( ) Wektor2 W1;

8 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; Wektor2( ): x(tab[0]), y(tab[1]) ; // int main( ) Wektor2 W1;

9 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; Wektor2( ): x(tab[0]), y(tab[1]) ; // int main( ) Wektor2 W1; Wektor2 W2(W1);

10 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; Wektor2( ): x(tab[0]), y(tab[1]) ; // int main( ) Wektor2 W1; Wektor2 W2(W1);

11 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; Wektor2( ): x(tab[0]), y(tab[1]) Wektor2(const Wektor2 &W)... ; // int main( ) Wektor2 W1; Wektor2 W2(W1);

12 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; Wektor2( ): x(tab[0]), y(tab[1]) Wektor2(const Wektor2 &W): x(tab[0]), y(tab[1]) x = W.x; y = W.y; ; // int main( ) Wektor2 W1; Wektor2 W2(W1);

13 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; Wektor2( ): x(tab[0]), y(tab[1]) Wektor2(const Wektor2 &W): x(tab[0]), y(tab[1]) x = W.x; y = W.y; ; // int main( ) Wektor2 W1; Wektor2 W2(W1); W1 = W2;

14 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; Wektor2( ): x(tab[0]), y(tab[1]) Wektor2(const Wektor2 &W): x(tab[0]), y(tab[1]) x = W.x; y = W.y; ; // int main( ) Wektor2 W1; Wektor2 W2(W1); W1 = W2;

15 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; Wektor2( ): x(tab[0]), y(tab[1]) Wektor2(const Wektor2 &W): x(tab[0]), y(tab[1]) x = W.x; y = W.y; Wektor2& operator = ( const Wektor2& W )... ; // int main( ) Wektor2 W1; Wektor2 W2(W1); W1 = W2;

16 Klasy z polami referencyjnymi Klasy z polami referencyjnymi Klasa std::string class Wektor2 // public : int &x, &y; int Tab[2]; Wektor2( ): x(tab[0]), y(tab[1]) Wektor2(const Wektor2 &W): x(tab[0]), y(tab[1]) x = W.x; y = W.y; Wektor2& operator = ( const Wektor2& W ) x = W.x; y = W.y; ; // int main( ) Wektor2 W1; Wektor2 W2(W1); W1 = W2;

17 Podsumowanie (1) Klasy z polami referencyjnymi Klasa std::string W przypadku klas, w których zdefiniowane są pola wskaźnikowe, może koniecznym okazać się zdefiniowanie konstruktora kopiującego oraz przeciążenie operatora przypisania. Jest to niezbędne wtedy, gdy obiekty tej klasy stowarzyszone są ze strukturami tworzonymi dynamicznie i usuwanymi w destruktorze. Jeżeli stowarzyszone z danym obiektem struktury danych nie są usuwane w destruktorze, to na ogół można ograniczyć się do domyślnej implementacji konstruktora kopiującego i operatora przypisania.

18 Podsumowanie (1) Klasy z polami referencyjnymi Klasa std::string W przypadku klas, w których zdefiniowane są pola wskaźnikowe, może koniecznym okazać się zdefiniowanie konstruktora kopiującego oraz przeciążenie operatora przypisania. Jest to niezbędne wtedy, gdy obiekty tej klasy stowarzyszone są ze strukturami tworzonymi dynamicznie i usuwanymi w destruktorze. Jeżeli stowarzyszone z danym obiektem struktury danych nie są usuwane w destruktorze, to na ogół można ograniczyć się do domyślnej implementacji konstruktora kopiującego i operatora przypisania.

19 Podsumowanie (1) Klasy z polami referencyjnymi Klasa std::string W przypadku klas, w których zdefiniowane są pola wskaźnikowe, może koniecznym okazać się zdefiniowanie konstruktora kopiującego oraz przeciążenie operatora przypisania. Jest to niezbędne wtedy, gdy obiekty tej klasy stowarzyszone są ze strukturami tworzonymi dynamicznie i usuwanymi w destruktorze. Jeżeli stowarzyszone z danym obiektem struktury danych nie są usuwane w destruktorze, to na ogół można ograniczyć się do domyślnej implementacji konstruktora kopiującego i operatora przypisania.

20 Podsumowanie (2) Klasy z polami referencyjnymi Klasa std::string W klasach, w których definiowane są pola referencyjne nie istnieje domyślna implementacja konstruktora kopiującego i operatora przypisania. Wynika to z fakty, że zwykłe przepisanie bajt po bajcie zawartości obiektów zmieniałoby referencje. Z definicji zaś referencji wynika, że w trakcie swojego istnienia nie może ona ulegać zmianom. Jeżeli obiekty klasy zawierającej pola referencyjne mają być przekazywane jako parametr wywołania funkcji/metody lub przez nie zwracane lub też w sposób jawny ma być wywoływany konstruktor kopiujący, to jego zdefiniowanie jest bezwzględnie konieczne. W przypadku, gdy ma być wykonywana operacja przypisania, konieczne jest wówczas zdefiniowanie operatora przypisania. Jeżeli wyżej wymienione operacje nie będą wykonywane, to nie ma potrzeby definiowania zarówno konstruktora kopiującego, jak też operatora przypisania.

21 Podsumowanie (2) Klasy z polami referencyjnymi Klasa std::string W klasach, w których definiowane są pola referencyjne nie istnieje domyślna implementacja konstruktora kopiującego i operatora przypisania. Wynika to z fakty, że zwykłe przepisanie bajt po bajcie zawartości obiektów zmieniałoby referencje. Z definicji zaś referencji wynika, że w trakcie swojego istnienia nie może ona ulegać zmianom. Jeżeli obiekty klasy zawierającej pola referencyjne mają być przekazywane jako parametr wywołania funkcji/metody lub przez nie zwracane lub też w sposób jawny ma być wywoływany konstruktor kopiujący, to jego zdefiniowanie jest bezwzględnie konieczne. W przypadku, gdy ma być wykonywana operacja przypisania, konieczne jest wówczas zdefiniowanie operatora przypisania. Jeżeli wyżej wymienione operacje nie będą wykonywane, to nie ma potrzeby definiowania zarówno konstruktora kopiującego, jak też operatora przypisania.

22 Podsumowanie (2) Klasy z polami referencyjnymi Klasa std::string W klasach, w których definiowane są pola referencyjne nie istnieje domyślna implementacja konstruktora kopiującego i operatora przypisania. Wynika to z fakty, że zwykłe przepisanie bajt po bajcie zawartości obiektów zmieniałoby referencje. Z definicji zaś referencji wynika, że w trakcie swojego istnienia nie może ona ulegać zmianom. Jeżeli obiekty klasy zawierającej pola referencyjne mają być przekazywane jako parametr wywołania funkcji/metody lub przez nie zwracane lub też w sposób jawny ma być wywoływany konstruktor kopiujący, to jego zdefiniowanie jest bezwzględnie konieczne. W przypadku, gdy ma być wykonywana operacja przypisania, konieczne jest wówczas zdefiniowanie operatora przypisania. Jeżeli wyżej wymienione operacje nie będą wykonywane, to nie ma potrzeby definiowania zarówno konstruktora kopiującego, jak też operatora przypisania.

23 Podsumowanie (2) Klasy z polami referencyjnymi Klasa std::string W klasach, w których definiowane są pola referencyjne nie istnieje domyślna implementacja konstruktora kopiującego i operatora przypisania. Wynika to z fakty, że zwykłe przepisanie bajt po bajcie zawartości obiektów zmieniałoby referencje. Z definicji zaś referencji wynika, że w trakcie swojego istnienia nie może ona ulegać zmianom. Jeżeli obiekty klasy zawierającej pola referencyjne mają być przekazywane jako parametr wywołania funkcji/metody lub przez nie zwracane lub też w sposób jawny ma być wywoływany konstruktor kopiujący, to jego zdefiniowanie jest bezwzględnie konieczne. W przypadku, gdy ma być wykonywana operacja przypisania, konieczne jest wówczas zdefiniowanie operatora przypisania. Jeżeli wyżej wymienione operacje nie będą wykonywane, to nie ma potrzeby definiowania zarówno konstruktora kopiującego, jak też operatora przypisania.

24 Podsumowanie (2) Klasy z polami referencyjnymi Klasa std::string W klasach, w których definiowane są pola referencyjne nie istnieje domyślna implementacja konstruktora kopiującego i operatora przypisania. Wynika to z fakty, że zwykłe przepisanie bajt po bajcie zawartości obiektów zmieniałoby referencje. Z definicji zaś referencji wynika, że w trakcie swojego istnienia nie może ona ulegać zmianom. Jeżeli obiekty klasy zawierającej pola referencyjne mają być przekazywane jako parametr wywołania funkcji/metody lub przez nie zwracane lub też w sposób jawny ma być wywoływany konstruktor kopiujący, to jego zdefiniowanie jest bezwzględnie konieczne. W przypadku, gdy ma być wykonywana operacja przypisania, konieczne jest wówczas zdefiniowanie operatora przypisania. Jeżeli wyżej wymienione operacje nie będą wykonywane, to nie ma potrzeby definiowania zarówno konstruktora kopiującego, jak też operatora przypisania.

25 Plan prezentacji Klasy z polami referencyjnymi Klasa std::string 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 funkcji Podstawowa idea klas 3 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

26 Klasa std::string Klasy z polami referencyjnymi Klasa std::string Klasa łańcuchów napisowych została zaprojektowana, tak aby można ją było wykorzystywać jak normalny typ wbudowany. Pozwala to na ułatwienie przetwarzania tekstów Jedną z najważniejszych cech typu std::string jest to że jest zdefiniowana dla niego operacja kopiowania z wykorzystaniem zarówno konstruktora kopiującego jak też operatora podstawienie =. Rozwiązuje to problem dynamicznego przydziału i zwalniania pamięci, co na poziomie języka C jest zawsze kłopotliwe. Zdefiniowane są operacje porównywaniałańcuchów (operatory: ==, <, >, <=, >=,!=), oraz operacja konkatenacji (operatory: +, +=). Dostępnych jest wiele dodatkowych udogodnień pozwalających na wyszukiwaniu znaków lub podciągów, wstawianie sekwencji znaków, zamiany itp. Nie są zdefiniowane metody wyszukiwania w oparciu o wyrażenia regularne.

27 Przykład prostych operacji Klasy z polami referencyjnymi Klasa std::string int main( ) std::string Zyczenia;

28 Przykład prostych operacji Klasy z polami referencyjnymi Klasa std::string int main( ) std::string Zyczenia; std::string Naglowek = Z okazji spotkania Marsjan\n ;

29 Przykład prostych operacji Klasy z polami referencyjnymi Klasa std::string int main( ) std::string Zyczenia; std::string Naglowek = Z okazji spotkania Marsjan\n ; Zyczenia = Naglowek + wszystkiego najlepszego zyczy\n ;

30 Przykład prostych operacji Klasy z polami referencyjnymi Klasa std::string int main( ) std::string Zyczenia; std::string Naglowek = Z okazji spotkania Marsjan\n ; Zyczenia = Naglowek + wszystkiego najlepszego zyczy\n ; Zyczenia += Ziemianin ;

31 Przykład prostych operacji Klasy z polami referencyjnymi Klasa std::string int main( ) std::string Zyczenia; std::string Naglowek = Z okazji spotkania Marsjan\n ; Zyczenia = Naglowek + wszystkiego najlepszego zyczy\n ; Zyczenia += Ziemianin ; cout << Zyczenia << endl;

32 Przykład prostych operacji Klasy z polami referencyjnymi Klasa std::string string UniwersalneZyczenia( const char Naglowek, const char Zakonczenie ) string Zyczenia = Naglowek; Zyczenia += wszystkiego najlepszego zyczy\n ; Zyczenia += Zakonczenie; return Zyczenia; int main( )

33 Przykład prostych operacji Klasy z polami referencyjnymi Klasa std::string string UniwersalneZyczenia( const char Naglowek, const char Zakonczenie ) string Zyczenia = Naglowek; Zyczenia += wszystkiego najlepszego zyczy\n ; Zyczenia += Zakonczenie; return Zyczenia; int main( ) string Zyczenia = UniwersalneZyczenia( Z okazji spotkania Marsjan, Ziemianin ); cout << Zyczenia << endl;

34 Przykład prostych operacji Klasy z polami referencyjnymi Klasa std::string string UniwersalneZyczenia( const char Naglowek, const char Zakonczenie ) string Zyczenia = Naglowek; Zyczenia += wszystkiego najlepszego zyczy\n ; Zyczenia += Zakonczenie; return Zyczenia; int main( ) string Zyczenia = UniwersalneZyczenia( Z okazji spotkania Marsjan, Ziemianin ); cout << Zyczenia << endl; const char Zycz C = Zyczenia.c str( );

35 Przykład prostych operacji Klasy z polami referencyjnymi Klasa std::string string UniwersalneZyczenia( const char Naglowek, const char Zakonczenie ) string Zyczenia = Naglowek; Zyczenia += wszystkiego najlepszego zyczy\n ; Zyczenia += Zakonczenie; return Zyczenia; int main( ) string Zyczenia = UniwersalneZyczenia( Z okazji spotkania Marsjan, Ziemianin ); cout << Zyczenia << endl; const char Zycz C = Zyczenia.c str( ); Zyczenia = Z okazji pierwszej swiatowej inwazji Marsjan na supermarkety... ;

36 Przykład prostych operacji Klasy z polami referencyjnymi Klasa std::string string UniwersalneZyczenia( const char Naglowek, const char Zakonczenie ) string Zyczenia = Naglowek; Zyczenia += wszystkiego najlepszego zyczy\n ; Zyczenia += Zakonczenie; return Zyczenia; int main( ) string Zyczenia = UniwersalneZyczenia( Z okazji spotkania Marsjan, Ziemianin ); cout << Zyczenia << endl; const char Zycz C = Zyczenia.c str( ); Zyczenia = Z okazji pierwszej swiatowej inwazji Marsjan na supermarkety... ; cout << Zycz C << endl;

37 Przeciążone operatory Klasy z polami referencyjnymi Klasa std::string Przeciążenia w klasie string: < > <= >= ==!= porównania, = przypisanie, +, += konkatenacja, [ ] bezpośredni dostęp do znaku bez kontroli zakresu, Przeciążenia zewnętrzne dla klasy string: << zapis do strumień klasy ostream, >> cztanie ze strumienia klasy istream.

38 Przykład metod Klasy z polami referencyjnymi Klasa std::string Tworzenie tablic i łańcuchów znakowych w sensie języka C: c str zwraca łańcuch w sensie języka C, data copy zwraca łańcuch w postaci tablicy znakowej, przekopiowuje do tablicy znakowej zadana ilość znaków. Ekstrahowanie podłańcuchów: substr zwraca podciąg (obiekt klasy string), Dostęp do poszczególnych elementów łańcucha: at kontrolowany dostęp do danego znaku.

39 Przykład metod Klasy z polami referencyjnymi Klasa std::string Rozmiar i wielkość łańcucha: length podaje długość łańcucha w sensie języka C, size podaje rozmiar łańcucha, max size podaje maksymalny mo liwy rozmiar łańcucha, informuje czy dany łańcuch jest pusty. empty Pojemność łańcucha i jej zmiana: capacity reserve określenie pojemności, rezerwacja pamięci. Szukanie i porównywanie: find compare szukania znaków i ciągów znaków, porównuje dwa ciągi.

40 Przykład metod Klasy z polami referencyjnymi Klasa std::string string RdzenNazwyPliku( const string &NazwaPliku ) size t Ind = NazwaPliku.find(. ); if ( Ind == string::npos ) return NazwaPliku; return NazwaPliku.substr( 0, Ind ); int main( ) cout << RdzenNazwyPliku( rownanie liniowe.dane ) << endl;

41 Klasy z polami referencyjnymi Klasa std::string Przykład metod int main() cout << CzyNalezyDoGrupy( jk, cdrom:x:24:jk,installer,mythtv ) << endl;

42 Klasy z polami referencyjnymi Klasa std::string Przykład metod bool CzyJestWLiscie( string LoginUzyt, string ListaUzyt ) LoginUzyt =, + LoginUzyt +, ; ListaUzyt =, + ListaUzyt +, ; return ListaUzyt.find(LoginUzyt)!= string ::npos; int main() cout << CzyNalezyDoGrupy( jk, cdrom:x:24:jk,installer,mythtv ) << endl;

43 Przykład metod Klasy z polami referencyjnymi Klasa std::string bool CzyJestWLiscie( string LoginUzyt, string ListaUzyt ) LoginUzyt =, + LoginUzyt +, ; ListaUzyt =, + ListaUzyt +, ; return ListaUzyt.find(LoginUzyt)!= string ::npos; bool CzyNalezyDoGrupy( const char sloginuzyt, const char slistagrupy ) istringstream StrmWe(sListaGrupy); string ListaUzyt; for (int i = 0; i < 3; ++i) StrmWe.ignore(1000, : ); return CzyJestWLiscie(sLoginUzyt,ListaUzyt); int main() cout << CzyNalezyDoGrupy( jk, cdrom:x:24:jk,installer,mythtv ) << endl;

44 Plan prezentacji funkcji Podstawowa idea klas 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 funkcji Podstawowa idea klas 3 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

45 Problemy z tłumaczeniem funkcji Podstawowa idea klas template wzorzec szablon

46 Problemy z tłumaczeniem funkcji Podstawowa idea klas template wzorzec szablon

47 Dlaczego szablony? funkcji Podstawowa idea klas W językach takich jak C i Pascal mamy do czynienia z separacją kodu i typu parametrów. Wartości z jakimi wywoływane są funkcje i procedury mogą parametryzować ich działanie. Jednak ich typy zostają ustalone raz na zawsze w momencie ich definicji. Problem: Należy zaimplementować algorytm sortowania dla obiektów różnych typów.

48 Dlaczego szablony? funkcji Podstawowa idea klas W językach takich jak C i Pascal mamy do czynienia z separacją kodu i typu parametrów. Wartości z jakimi wywoływane są funkcje i procedury mogą parametryzować ich działanie. Jednak ich typy zostają ustalone raz na zawsze w momencie ich definicji. Problem: Należy zaimplementować algorytm sortowania dla obiektów różnych typów.

49 Dlaczego szablony? Problem: Możliwe rozwiązania: funkcji Podstawowa idea klas Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Implementacja algorytmu dla wszystkich typów, dla których przewidziane jest jego zastosowanie. Implementacja algorytmu dla typu podstawowego takiego jak void lub Object. Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów (np. cpp dla C/C++).

50 Dlaczego szablony? Problem: Możliwe rozwiązania: funkcji Podstawowa idea klas Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Implementacja algorytmu dla wszystkich typów, dla których przewidziane jest jego zastosowanie. Implementacja algorytmu dla typu podstawowego takiego jak void lub Object. Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów (np. cpp dla C/C++).

51 Dlaczego szablony? Problem: Możliwe rozwiązania: funkcji Podstawowa idea klas Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Implementacja algorytmu dla wszystkich typów, dla których przewidziane jest jego zastosowanie. Implementacja algorytmu dla typu podstawowego takiego jak void lub Object. Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów (np. cpp dla C/C++).

52 Dlaczego szablony? Problem: Możliwe rozwiązania: funkcji Podstawowa idea klas Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Implementacja algorytmu dla wszystkich typów, dla których przewidziane jest jego zastosowanie. Implementacja algorytmu dla typu podstawowego takiego jak void lub Object. Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów (np. cpp dla C/C++). Najlepszym rozwiązaniem dla postawionego problemu jest koncepcja szablonów.

53 Dlaczego szablony? Problem: Możliwe rozwiązania: funkcji Podstawowa idea klas Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Implementacja algorytmu dla wszystkich typów, dla których przewidziane jest jego zastosowanie. Implementacja algorytmu dla typu podstawowego takiego jak void lub Object. Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów (np. cpp dla C/C++). Najlepszym rozwiązaniem dla postawionego problemu jest koncepcja szablonów.

54 Dlaczego szablony? Problem: Możliwe rozwiązania: funkcji Podstawowa idea klas Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Implementacja algorytmu dla wszystkich typów, dla których przewidziane jest jego zastosowanie. Implementacja algorytmu dla typu podstawowego takiego jak void lub Object. Zdefiniowanie makr i wykorzystanie specjalnych preprocesorów (np. cpp dla C/C++). Najlepszym rozwiązaniem dla postawionego problemu jest koncepcja szablonów.

55 Podstawowe cechy funkcji Podstawowa idea klas pozwalają na definiowanie funkcji, których typy parametrów są także parametrami tych funkcji. Możliwe jest definiowanie klas, które parametryzowane mogą być typami pól występujących w tych klasach i/lub też typami parametrów metod. Programista definiuje tylko raz dany szablon. Kompilator dokonuje dedukcji typów parametrów danego szablonu i konkretyzuje go tworząc kod dla użytych typów w wywołaniu funkcji lub definicji obiektu danej klasy. Programista może też jawnie określić wartości parametrów szablonu.

56 Podstawowe cechy funkcji Podstawowa idea klas pozwalają na definiowanie funkcji, których typy parametrów są także parametrami tych funkcji. Możliwe jest definiowanie klas, które parametryzowane mogą być typami pól występujących w tych klasach i/lub też typami parametrów metod. Programista definiuje tylko raz dany szablon. Kompilator dokonuje dedukcji typów parametrów danego szablonu i konkretyzuje go tworząc kod dla użytych typów w wywołaniu funkcji lub definicji obiektu danej klasy. Programista może też jawnie określić wartości parametrów szablonu.

57 Podstawowe cechy funkcji Podstawowa idea klas pozwalają na definiowanie funkcji, których typy parametrów są także parametrami tych funkcji. Możliwe jest definiowanie klas, które parametryzowane mogą być typami pól występujących w tych klasach i/lub też typami parametrów metod. Programista definiuje tylko raz dany szablon. Kompilator dokonuje dedukcji typów parametrów danego szablonu i konkretyzuje go tworząc kod dla użytych typów w wywołaniu funkcji lub definicji obiektu danej klasy. Programista może też jawnie określić wartości parametrów szablonu.

58 Podstawowe cechy funkcji Podstawowa idea klas pozwalają na definiowanie funkcji, których typy parametrów są także parametrami tych funkcji. Możliwe jest definiowanie klas, które parametryzowane mogą być typami pól występujących w tych klasach i/lub też typami parametrów metod. Programista definiuje tylko raz dany szablon. Kompilator dokonuje dedukcji typów parametrów danego szablonu i konkretyzuje go tworząc kod dla użytych typów w wywołaniu funkcji lub definicji obiektu danej klasy. Programista może też jawnie określić wartości parametrów szablonu.

59 Wady i zalety funkcji Podstawowa idea klas Zalety: dają możliwość tworzenia uniwersalnych algorytmów i uniwersalnych struktur danych. W odróżnieniu od makr możliwe jest zachowanie przejrzystości kodu. W odróżnieniu od wykorzystywania typów bazowych pozwalają zachować ścisłą kontrolę typów w trakcie kompilacji. Wady: Brak możliwości tworzenia oddzielnych jednostek kompilacji (modułów) w postaci czystych szablonów.

60 funkcji Podstawowa idea klas funkcji przykład dla typów wbudowanych template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; enum Symbole a=1, b, c ; int main( ) cout << Max(1,2) << endl; cout << Max(1.1, 2.2) << endl; cout << Max( A, B ) << endl; cout << Max( a, b ) << endl;

61 funkcji Podstawowa idea klas funkcji przykład dla typów wbudowanych template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; enum Symbole a=1, b, c ; int main( ) cout << Max(1,2) << endl; cout << Max(1.1, 2.2) << endl; cout << Max( A, B ) << endl; cout << Max( a, b ) << endl;

62 funkcji Podstawowa idea klas funkcji przykład dla typów wbudowanych template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; W tym przykładzie kompilator generuje kod funkcji Max dla czterech przypadków. Słowo kluczowe class może zostać zastąpione przez typename. enum Symbole a=1, b, c ; int main( ) cout << Max(1,2) << endl; cout << Max(1.1, 2.2) << endl; cout << Max( A, B ) << endl; cout << Max( a, b ) << endl;

63 funkcji własna klasa funkcji Podstawowa idea klas template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; Czy szablon można stosować również dla własnych klas? int main( ) Wektor W1(1,1), W2(4,5), W3; W3 = Max(W1,W2);

64 funkcji własna klasa struct Wektor float x, y; ; funkcji Podstawowa idea klas template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; int main( ) Wektor W1(1,1), W2(4,5), W3; W3 = Max(W1,W2);

65 funkcji własna klasa struct Wektor float x, y; ; funkcji Podstawowa idea klas template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; W takiej postaci na pewno nie będzie dobrze. Dlaczego? int main( ) Wektor W1(1,1), W2(4,5), W3; W3 = Max(W1,W2);

66 funkcji własna klasa struct Wektor float x, y; ; funkcji Podstawowa idea klas template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; Problemem jest operacja prównania dwóch wektorów. Dlaczego? int main( ) Wektor W1(1,1), W2(4,5), W3; W3 = Max(W1,W2);

67 funkcji własna klasa struct Wektor float x, y; ; funkcji Podstawowa idea klas bool operator < ( const Wektor& W ) const return x x+y y < W.x W.x+W.y W.y; template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; Aby było dobrze, należy zdefiniować przeciążenie operatora porównania. int main( ) Wektor W1(1,1), W2(4,5), W3; W3 = Max(W1,W2);

68 Plan prezentacji funkcji Podstawowa idea klas 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 funkcji Podstawowa idea klas 3 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

69 klas funkcji Podstawowa idea klas klas pozwalają na przedstawienie ogólnych pojęć i wzajemnych ich związków. Pozwalają na abstrahowanie od typu poszczególnych atrybutów związanych z danym pojęciem. Pozwalają programiście skoncentrować na ogólnych zależnościach i mechanizmach. pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego.

70 klas funkcji Podstawowa idea klas klas pozwalają na przedstawienie ogólnych pojęć i wzajemnych ich związków. Pozwalają na abstrahowanie od typu poszczególnych atrybutów związanych z danym pojęciem. Pozwalają programiście skoncentrować na ogólnych zależnościach i mechanizmach. pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego.

71 klas funkcji Podstawowa idea klas klas pozwalają na przedstawienie ogólnych pojęć i wzajemnych ich związków. Pozwalają na abstrahowanie od typu poszczególnych atrybutów związanych z danym pojęciem. Pozwalają programiście skoncentrować na ogólnych zależnościach i mechanizmach. pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego.

72 klas funkcji Podstawowa idea klas klas pozwalają na przedstawienie ogólnych pojęć i wzajemnych ich związków. Pozwalają na abstrahowanie od typu poszczególnych atrybutów związanych z danym pojęciem. Pozwalają programiście skoncentrować na ogólnych zależnościach i mechanizmach. pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego.

73 klas funkcji Podstawowa idea klas klas pozwalają na przedstawienie ogólnych pojęć i wzajemnych ich związków. Pozwalają na abstrahowanie od typu poszczególnych atrybutów związanych z danym pojęciem. Pozwalają programiście skoncentrować na ogólnych zależnościach i mechanizmach. pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego.

74 Ogólna postać szablonu funkcji Podstawowa idea klas template < lista-parametrow-rozdzielonych-przecinkami > class Klasa ;...

75 Ogólna postać szablonu funkcji Podstawowa idea klas template < lista-parametrow-rozdzielonych-przecinkami > class Klasa ;... Dopuszczalne parametry: typ wbudowany lub zdefiniowany przez użytkownika, stała w czasie kompilacji (liczba, wskaźnik, znaki itp.), inny szablon.

76 Ogólna postać szablonu funkcji Podstawowa idea klas template < lista-parametrow-rozdzielonych-przecinkami > class Klasa ;... Dopuszczalne parametry: typ wbudowany lub zdefiniowany przez użytkownika, stała w czasie kompilacji (liczba, wskaźnik, znaki itp.), inny szablon.

77 Ogólna postać szablonu funkcji Podstawowa idea klas template < lista-parametrow-rozdzielonych-przecinkami > class Klasa ;... Dopuszczalne parametry: typ wbudowany lub zdefiniowany przez użytkownika, stała w czasie kompilacji (liczba, wskaźnik, znaki itp.), inny szablon.

78 Ogólna postać szablonu funkcji Podstawowa idea klas template < lista-parametrow-rozdzielonych-przecinkami > class Klasa ;... Dopuszczalne parametry: typ wbudowany lub zdefiniowany przez użytkownika, stała w czasie kompilacji (liczba, wskaźnik, znaki itp.), inny szablon.

79 Stos funkcji Podstawowa idea klas class Stos int Tab[ROZ STOSU]; int unsigned int Ilosc; public : Stos( ) Ilosc = 0; bool Pobierz(int& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const int& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos St;

80 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; Słowo kluczowe typename sygnalizuje, że parametr szablonu jest typem.

81 Przykład szablonu stosu template < class TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true;

82 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true;

83 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos<float> St;

84 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos<double[100]> St;

85 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos<std::string> St;

86 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos<std::istream> St;

87 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos<std::istream> St;

88 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos<std::istream> St;

89 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos<std::istream > St;

90 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos<std::istream&> St;

91 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos<std::istream&> St;

92 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true; int main( ) Stos< Stos< Stos< char[20] > > > St;

93 Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= ROZ STOSU? false : Tab[ Ilosc++] = El, true;

94 Przykład szablonu stosu template < typename TYP, unsigned int Rozmiar > class Stos TYP Tab[Rozmiar]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= Rozmiar? false : Tab[ Ilosc++] = El, true;

95 Przykład szablonu stosu template < typename TYP, unsigned int Rozmiar > class Stos TYP Tab[Rozmiar]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; funkcji Podstawowa idea klas bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= Rozmiar? false : Tab[ Ilosc++] = El, true; int main( ) Stos<float, 100> St;

96 Przykład szablonu stosu funkcji Podstawowa idea klas template < typename TYP, unsigned int Rozmiar= 100 > class Stos TYP Tab[Rozmiar]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= Rozmiar? false : Tab[ Ilosc++] = El, true; int main( ) Stos<float, 100> St;

97 Przykład szablonu stosu funkcji Podstawowa idea klas template < typename TYP, unsigned int Rozmiar= 100 > class Stos TYP Tab[Rozmiar]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; bool Pobierz(TYP& El) return! Ilosc? false : El = Tab[ Ilosc], true; ; bool Poloz(const TYP& El) return Ilosc >= Rozmiar? false : Tab[ Ilosc++] = El, true; int main( ) Stos<float> St;

98 Plan prezentacji funkcji Podstawowa idea klas 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 funkcji Podstawowa idea klas 3 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

99 funkcji Podstawowa idea klas Klasa wektor plik nagłówkowy: wektor.hh #ifndef WEKTOR HH #define WEKTOR HH #include <iostream> #define ROZMIAR 3 #define TYP double class Wektor TYP Wsp[ ROZMIAR ]; public : Wektor( ); TYP operator [ ] (int Ind) const return Wsp[Ind]; TYP& operator [ ] (int Ind) return Wsp[Ind]; ; std::ostream & operator << (std::ostream & StrmWy, const Wektor & Wek); std::istream & operator >> (std::istream & StrmWe, Wektor & Wek); #endif

100 funkcji Podstawowa idea klas Klasa wektor plik modułu: wektor.cpp #include wektor.hh using namespace std; Wektor::Wektor( ) for (int Ind = 0; Ind < ROZMIAR; ++Ind) Tab[Ind] = 0; ostream & operator << (ostream & StrmWy, const Wektor & Wek)... istream & operator >> (istream & StrmWe, Wektor & Wek)...

101 funkcji Podstawowa idea klas Klasa wektor plik nagłówkowy: wektor.hh #ifndef WEKTOR HH #define WEKTOR HH #include <iostream> template <typename Typ, int Rozmiar> class Wektor private : Typ Wsp[ Rozmiar ]; public : Wektor(); Typ operator [ ] (unsigned int Ind) const return Wsp[Ind]; Typ& operator [ ] (unsigned int Ind) return Wsp[Ind]; ; #endif

102 funkcji Podstawowa idea klas Klasa wektor plik nagłówkowy: wektor.hh... template <typename Typ, int Rozmiar> class Wektor private : Typ Wsp[ Rozmiar ]; public : Wektor(); Typ operator [ ] (unsigned int Ind) const return Wsp[Ind]; Typ& operator [ ] (unsigned int Ind) return Wsp[Ind]; ; template <typename Typ, int Rozmiar> std::ostream & operator << (std::ostream & StrmWy, Wektor<Typ,Rozmiar>& Wek)... template <typename Typ, int Rozmiar> std::istream & operator >> (std::istream & StrmWe, Wektor<Typ,Rozmiar>& Wek)...

103 funkcji Podstawowa idea klas Klasa wektor plik nagłówkowy: wektor.hh... template <typename Typ, int Rozmiar> class Wektor... public : Wektor();... ; template <typename Typ, int Rozmiar> Wektor<Typ,Rozmiar>::Wektor() for (int Ind = 0; Ind < Rozmiar; ++Ind) Wsp[Ind] = 0;... template <typename Typ, int Rozmiar> std::istream & operator >> (std::istream & StrmWe, Wektor<Typ,Rozmiar>& Wek)...

104 funkcji Podstawowa idea klas Klasa wektor plik nagłówkowy: wektor.hh... inline bool Wczytaj OkreslonyZnak(std::istream &StrmWe, const char Wzorzec)... template <typename Typ> bool Wczytaj Liczbe OkreslonyZnak(std::istream & StrmWe, Typ & Liczba, const char Wzorzec)... template <typename Typ, int Rozmiar> std::istream & operator >> (std::istream & StrmWe, Wektor<Typ,Rozmiar>& Wek)......

105 Plan prezentacji funkcji Podstawowa idea klas 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 funkcji Podstawowa idea klas 3 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

106 Szablon klasy Wektor w UML funkcji Podstawowa idea klas template <typename Typ, int Rozmiar> class Wektor private : Typ Wsp[ Rozmiar ]; public : Wektor(); Typ operator [ ] (unsigned int Ind) const return Wsp[Ind]; Typ& operator [ ] (unsigned int Ind) return Wsp[Ind]; ;

107 Klasa będąca instancją szablonu funkcji Podstawowa idea klas template <typename Typ, int Rozmiar> class Wektor private : Typ Wsp[ Rozmiar ]; public : Wektor(); Typ operator [ ] (unsigned int Ind) const return Wsp[Ind]; Typ& operator [ ] (unsigned int Ind) return Wsp[Ind]; ; Wektor<double, 3> W;

108 Plan prezentacji o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 funkcji Podstawowa idea klas 3 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

109 Klasa będąca instancją szablonu o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora vector dynamiczna tablica, deque kolejka wspierająca swobodny dostęp do dowolnego elementu, list lita dwukierukowa, forward list lista jednokierunkowa, array tablica o stałym rozmiarze, string kontener znakowy

110 Plan prezentacji o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 funkcji Podstawowa idea klas 3 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

111 Klasa będąca instancją szablonu o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora vec.front( ) zwraca pierwszy element, vec.back( ) zwraca ostatni element, vec[ i ] zwraca i-ty element (zakres nie jest sprawdzany), vec.at( i ) zwraca i-ty element (zakres jest sprawdzany, w przypadku błędu zgłaszany jest wyjątek out of range), vec.push back(e) dodaje na koniec kopie elementu e (może powodowaæ realokację pamięci), vec.pop back( ) usuwa ostatni element i nie zwraca go (może powodowaæ realokację pamięci), vec.size( ) zwraca aktualną liczbę elementów, vec.max size( ) zwraca największą możliwą ilość elementów jaką można zaalokować,

112 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora Klasa będąca instancją szablonu vec.begin( ) zwraca iterator wskazujący na pierwszy element, vec.end( ) zwraca iterator wskazujący na pozycję za ostatnim elementem, vec.rbegin( ) zwraca iterator dla iteracji odwrotnej wskazujący na ostatni element, vec.rend( ) zwraca iterator dla iteracji odwrotnej wskazujący na pozycję przed pierwszym elementem, std::vector<float> V1(6); float zm; for (int i=0; i < V1.size(); i++) V1[i] = 13; for (std::vector<float>::iterator iter = V1.begin(); iter!= V1.end(); ++iter) iter = 13

113 Plan prezentacji o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 funkcji Podstawowa idea klas 3 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

114 Zbiór punktów struct Wektor int x, y; ; o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora class ZbiorPunktow public :... private : unsigned int Rozmiar; Wektor wpunkty; ;......

115 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora Obiekt z dynamiczną tablicą elementów

116 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

117 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

118 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

119 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

120 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

121 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

122 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

123 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

124 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

125 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

126 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

127 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

128 Przeglądanie tablicy o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

129 Kontentery o różnej organizacji o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

130 Kontentery o różnej organizacji o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

131 Kontentery o różnej organizacji o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora

132 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora Iterator zunifikowane przeglądanie kolekcji elementów

133 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora Iterator zunifikowane przeglądanie kolekcji elementów

134 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora Iterator zunifikowane przeglądanie kolekcji elementów

135 o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje idea iteratora Iterator zunifikowane przeglądanie kolekcji elementów

136 Koniec prezentacji Dziękuję za uwagę

Wartości domyślne, szablony funkcji i klas

Wartości domyślne, szablony funkcji i 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 2012 Bogdan Kreczmer Niniejszy dokument

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

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

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

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

Qt po polsku. Bogdan Kreczmer.

Qt po polsku. Bogdan Kreczmer. Qt po polsku Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2013 Bogdan Kreczmer

Bardziej szczegółowo

Szablon klasy std::vector

Szablon klasy std::vector Szablon klasy std::vector 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

Bardziej szczegółowo

Wykład 4 Wybrane zagadnienia programowania w C++

Wykład 4 Wybrane zagadnienia programowania w C++ Wykład 4 Wybrane zagadnienia programowania w C++ Przykład programu obiektowego Dziedziczenie polimorfizm i metody wirtualne Wzorce (szablony) funkcji Wzorce klas 2016-01-03 Bazy danych-1 W4 1 Dziedziczenie

Bardziej szczegółowo

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Programowanie II prowadzący: Adam Dudek Lista nr 8 Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to najważniejsza cecha świadcząca o sile programowania

Bardziej szczegółowo

Ćwiczenia IV - Kontenery (pojemniki)

Ćwiczenia IV - Kontenery (pojemniki) Ćwiczenia IV - Kontenery (pojemniki) 28 października 2010 Kontener Kontener jest to obiekt który zawiera w sobie obiekty innej klasy i ma zdefiniowane metody nimi zarządzające. Jednym z najprostszych przykładów

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 11

Programowanie obiektowe w C++ Wykład 11 Programowanie obiektowe w C++ Wykład 11 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) Programowanie obiektowe w C++ 1 / 34 STL - rys historyczny utworzona została w 1994 r.

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

Przykład implementacji przeciażeń operatorów problem kolizji

Przykład implementacji przeciażeń operatorów problem kolizji Przykład implementacji przeciażeń operatorów problem kolizji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera

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

Funkcje składowe (metody)

Funkcje składowe (metody) Funkcje składowe (metody) class Punkt int x, y; void Rysuj() /* rysowanie */ ; class Punkt int x, y; void Rysuj(); ; void Punkt::Rysuj() /* rysowanie */ definicja funkcji wewnątrz ciała klasy funkcja otwarta

Bardziej szczegółowo

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI) Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI) Jacek Cichosz www.zssk.pwr.wroc.pl Katedra Systemów i Sieci Komputerowych Politechnika Wrocławska Dziedziczenie 221 Dziedziczenie Dziedziczenie

Bardziej szczegółowo

Kompozycja i dziedziczenie klas

Kompozycja i dziedziczenie klas Programowanie obiektowe Kompozycja i dziedziczenie klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Kompozycja i dziedziczenie klas

Bardziej szczegółowo

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec PROE wykład 7 kontenery tablicowe, listy dr inż. Jacek Naruniec Prosty kontener oparty na tablicach Funkcja dodawanie pojedynczego słonia do kontenera: 1 2 3 4 5 6 7 11 12 13 14 15 16 17 21 22 23 24 25

Bardziej szczegółowo

3-4. 5-7. 8-10. 11-12 15-18. 19-22

3-4. 5-7. 8-10. 11-12 15-18. 19-22 1. 2. 3-4. 5-7. 8-10. 11-12 13-14. 15-18. 19-22 23-28. 29-30. Programowanie strukturalne i obiektowe Typ wyliczeniowy, lista wyliczeniowa. Rzutowanie w C++. Wskaźniki i referencje. Działania na wskaźnikach.

Bardziej szczegółowo

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych Spis treści 1. Wstęp... 9 1.1. Inżynieria oprogramowania jako proces... 10 1.1.1. Algorytm... 11 1.2. Programowanie w językach wysokiego poziomu... 11 1.3. Obiektowe podejście do programowania... 12 1.3.1.

Bardziej szczegółowo

Kontenery. Wykład 12. Programowanie (język C++) Rodzaje kontenerów. Przegląd kontenerów

Kontenery. Wykład 12. Programowanie (język C++) Rodzaje kontenerów. Przegląd kontenerów Programowanie (język C) Kontenery Wykład 12. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Rodzaje kontenerów Kontenery sekwencyjne kolekcje uporządkowane, w których kaŝdy element

Bardziej szczegółowo

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska Qt sygnały i sloty Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera

Bardziej szczegółowo

0.1 Hierarchia klas. 0.1.1 Diagram. 0.1.2 Krótkie wyjaśnienie

0.1 Hierarchia klas. 0.1.1 Diagram. 0.1.2 Krótkie wyjaśnienie 0.1 Hierarchia klas 0.1.1 Diagram 0.1.2 Krótkie wyjaśnienie Po pierwsze to jest tylko przykładowe rozwiązanie. Zarówno na wtorkowych i czwartkowych ćwiczeniach odbiegaliśmy od niego, ale nie wiele. Na

Bardziej szczegółowo

Preprocesor języka C

Preprocesor języka C języka C Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy

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

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

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

Klasa std::string. Bogdan Kreczmer. ZPCiR IIAiR PWr pokój 307 budynek C3.

Klasa std::string. Bogdan Kreczmer. ZPCiR IIAiR PWr pokój 307 budynek C3. Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wieczorowe Studia Licencjackie Wrocław, 4..2006 Wstęp do programowania Wykład nr 7 (w oparciu o notatki K. Lorysia, z modyfikacjami) Obliczanie współczynnika dwumianowego Newtona. Definicja. n = m n! m!(

Bardziej szczegółowo

Praca na wielu bazach danych część 2. (Wersja 8.1)

Praca na wielu bazach danych część 2. (Wersja 8.1) Praca na wielu bazach danych część 2 (Wersja 8.1) 1 Spis treści 1 Analizy baz danych... 3 1.1 Lista analityczna i okno szczegółów podstawowe informacje dla każdej bazy... 3 1.2 Raporty wykonywane jako

Bardziej szczegółowo

np. tu - na pierwszej formatce kreatora zaznaczamy opcję nr 3

np. tu - na pierwszej formatce kreatora zaznaczamy opcję nr 3 UŜytkowanie bazy danych polega na wstawianiu, filtrowaniu, usuwaniu, edycji, wyszukiwaniu i sortowaniu danych. MoŜna zaprojektować realizację powyŝszych czynności przy uŝyciu standardowych formantów. Oto

Bardziej szczegółowo

Szablon klasy std::list

Szablon klasy std::list Szablon klasy std::list 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

Bardziej szczegółowo

Konfiguracja historii plików

Konfiguracja historii plików Wielu producentów oprogramowania oferuje zaawansowane rozwiązania do wykonywania kopii zapasowych plików użytkownika czy to na dyskach lokalnych czy w chmurze. Warto jednak zastanowić się czy instalacja

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

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

class A { public: A(): i(5), s("abc") { } int i; string s; };

class A { public: A(): i(5), s(abc) { } int i; string s; }; UWAGA! PoniŜej są pytania z egzaminu, z zaznaczonymi poprawnymi odpowiedziami. Przy niektórych z nich napisałem jakieś słowo komentarza (czemu tak, a nie inaczej...). Przypominam, Ŝe zasada punktacji była

Bardziej szczegółowo

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. PROGRAMOWANIE OBIEKTOWE W C++ cz. 2 Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. Dziedziczenie Dziedziczenie jest to technika pozwalaj c na definiowanie nowej klasy przy wykorzystaniu

Bardziej szczegółowo

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD 1. Wprowadzenie DuŜa grupa sterowników mikroprocesorowych wymaga obsługi przycisków, które umoŝliwiają uŝytkownikowi uruchamianie

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

Przykłady wybranych fragmentów prac egzaminacyjnych z komentarzami Technik ochrony fizycznej osób i mienia 515[01]

Przykłady wybranych fragmentów prac egzaminacyjnych z komentarzami Technik ochrony fizycznej osób i mienia 515[01] Przykłady wybranych fragmentów prac egzaminacyjnych z komentarzami Technik ochrony fizycznej osób i mienia 515[01] 1 2 3 4 5 6 Efektem rozwiązania zadania egzaminacyjnego przez zdającego była praca 7 egzaminacyjna,

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

Architektura Systemów Komputerowych. Sterowanie programem skoki Przerwania

Architektura Systemów Komputerowych. Sterowanie programem skoki Przerwania Architektura Systemów Komputerowych Sterowanie programem skoki Przerwania 1 Sterowanie programem - skoki Kolejność wykonywania instrukcji programu jest zazwyczaj zgodna z kolejnością ich umiejscowienia

Bardziej szczegółowo

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania WYKŁAD 8 Reprezentacja obrazu Elementy edycji (tworzenia) obrazu Postacie obrazów na różnych etapach procesu przetwarzania Klasy obrazów Klasa 1: Obrazy o pełnej skali stopni jasności, typowe parametry:

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

Tematyka i rozwiązania metodyczne kolejnych zajęć lekcyjnych wraz z ćwiczeniami.

Tematyka i rozwiązania metodyczne kolejnych zajęć lekcyjnych wraz z ćwiczeniami. Tematyka i rozwiązania metodyczne kolejnych zajęć lekcyjnych wraz z ćwiczeniami. Zagadnienie tematyczne (blok tematyczny): Bazy danych (Podr.cz. II, str.109-138) Podstawa programowa: Rozwiązywanie problemów

Bardziej szczegółowo

Konstruktor kopiujacy

Konstruktor kopiujacy Konstruktor kopiujacy Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania Elementy algorytmiki C w środowisku.e (C#) dr inŝ. Grzegorz Zych Copernicanum, pok. 104 lub 206a 1 Minimum programowe reści kształcenia: Pojęcie algorytmu. Podstawowe konstrukcje

Bardziej szczegółowo

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007 GEO-SYSTEM Sp. z o.o. 02-732 Warszawa, ul. Podbipięty 34 m. 7, tel./fax 847-35-80, 853-31-15 http:\\www.geo-system.com.pl e-mail:geo-system@geo-system.com.pl GEO-RCiWN Rejestr Cen i Wartości Nieruchomości

Bardziej szczegółowo

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną,

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

STA T T A YSTYKA Korelacja

STA T T A YSTYKA Korelacja STATYSTYKA Korelacja Pojęcie korelacji Korelacja (współzależność cech) określa wzajemne powiązania pomiędzy wybranymi zmiennymi. Charakteryzując korelację dwóch cech podajemy dwa czynniki: kierunek oraz

Bardziej szczegółowo

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach. Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach. 1 PROJEKTY KOSZTOWE 2 PROJEKTY PRZYCHODOWE 3 PODZIAŁ PROJEKTÓW ZE WZGLĘDU

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 10. Metaprogramowanie cz.2: szablony struktur i klas

Programowanie obiektowe, wykład nr 10. Metaprogramowanie cz.2: szablony struktur i klas Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 10 Metaprogramowanie cz.2: szablony struktur i klas Definiowanie szablonów

Bardziej szczegółowo

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Akademickie Centrum Informatyki PS. Wydział Informatyki PS Akademickie Centrum Informatyki PS Wydział Informatyki PS Wydział Informatyki Sieci komputerowe i Telekomunikacyjne ROUTING Krzysztof Bogusławski tel. 4 333 950 kbogu@man.szczecin.pl 1. Wstęp 2. Tablica

Bardziej szczegółowo

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski Bazy danych II Andrzej Grzybowski Instytut Fizyki, Uniwersytet Śląski Wykład 11 Zastosowanie PHP do programowania aplikacji baz danych Oracle Wsparcie programowania w PHP baz danych Oracle Oprócz możliwego

Bardziej szczegółowo

G PROGRAMMING. Part #4

G PROGRAMMING. Part #4 G PROGRAMMING Part #4 Tablice, wykresy, klastry Tablice Zbiór elementów danych tego samego typu Zastosowanie gromadzenie danych z powtarzalnych operacji odczytu, obliczeń (magazynowanie danych przebiegów

Bardziej szczegółowo

Elementy animacji sterowanie manipulatorem

Elementy animacji sterowanie manipulatorem Elementy animacji sterowanie manipulatorem 1 Cel zadania Wykształcenie umiejętności korzystania z zapisu modelu aplikacji w UML oraz definiowania właściwego interfejsu klasy. 2 Opis zadania Należy napisać

Bardziej szczegółowo

I. LOGICZNE STRUKTURY DRZEWIASTE

I. LOGICZNE STRUKTURY DRZEWIASTE I LOGICZNE STRUKTURY DRZEWIASTE Analizując dany problem uzyskuje się zadanie projektowe w postaci pewnego zbioru danych Metoda morfologiczna, która została opracowana w latach 1938-1948 przez amerykańskiego

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

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

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x Wersja 02 Styczeń 2016 Centrum Elektronicznych Usług Płatniczych eservice Sp. z o.o. Spis treści 1. Wstęp... 3 1.1. Przeznaczenie dokumentu...

Bardziej szczegółowo

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA Wersja 5.1.9 Spis treści Rozdział 1 1.1 1.1.1 1.1.2 1.2 1.3 1.4 1.5 I Konfiguracja... 1-1 OID świadczeniodawcy... 1-2 Dodanie... instytucji zewnętrznej 1-4 Dodanie... zlecenia 1-11 Pobranie... materiału

Bardziej szczegółowo

KLAUZULE ARBITRAŻOWE

KLAUZULE ARBITRAŻOWE KLAUZULE ARBITRAŻOWE KLAUZULE arbitrażowe ICC Zalecane jest, aby strony chcące w swych kontraktach zawrzeć odniesienie do arbitrażu ICC, skorzystały ze standardowych klauzul, wskazanych poniżej. Standardowa

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

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY Nazwisko Imię album termin zajęć Marek Lewandowski 59817 Maciej Mietliński 59832 poniedziałek 18:30 tydzień nieparzysty

Bardziej szczegółowo

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

Operacje wejścia/wyjścia (odsłona druga) - pliki Operacje wejścia/wyjścia (odsłona druga) - pliki Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały

Bardziej szczegółowo

1. Podstawy budowania wyra e regularnych (Regex)

1. Podstawy budowania wyra e regularnych (Regex) Dla wi kszo ci prostych gramatyk mo na w atwy sposób napisa wyra enie regularne które b dzie s u y o do sprawdzania poprawno ci zda z t gramatyk. Celem niniejszego laboratorium b dzie zapoznanie si z wyra

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

Rozliczenia z NFZ. Ogólne założenia. Spis treści

Rozliczenia z NFZ. Ogólne założenia. Spis treści Rozliczenia z NFZ Spis treści 1 Ogólne założenia 2 Generacja raportu statystycznego 3 Wczytywanie raportu zwrotnego 4 Szablony rachunków 4.1 Wczytanie szablonów 4.2 Wygenerowanie dokumentów rozliczenia

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

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

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej 3.1 Informacje ogólne Program WAAK 1.0 służy do wizualizacji algorytmów arytmetyki komputerowej. Oczywiście istnieje wiele narzędzi

Bardziej szczegółowo

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory. PROGRAMOWANIE OBIEKTOWE W C++ - cz 1 Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory. Program komputerowy opisuje w pewien sposób rzeczywisto.

Bardziej szczegółowo

Informacje o omawianym programie. Założenia programu omawianego w przykładzie

Informacje o omawianym programie. Założenia programu omawianego w przykładzie 1 Komunikacja człowiek - komputer Przedmiot: Komunikacja człowiek - komputer Ćwiczenie: 3 Temat dwiczenia: Projektowanie interfejsu programu typu bazodanowego dr Artur Bartoszewski CZĘŚD I analiza przykładowego

Bardziej szczegółowo

System do kontroli i analizy wydawanych posiłków

System do kontroli i analizy wydawanych posiłków System do kontroli i analizy wydawanych posiłków K jak KORZYŚCI C jak CEL W odpowiedzi na liczne pytania odnośnie rozwiązania umożliwiającego elektroniczną ewidencję wydawanych posiłków firma PControl

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

Algorytmy i Struktury Danych. Anna Paszyńska

Algorytmy i Struktury Danych. Anna Paszyńska Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;

Bardziej szczegółowo

API transakcyjne BitMarket.pl

API transakcyjne BitMarket.pl API transakcyjne BitMarket.pl Wersja 20140314 1. Sposób łączenia się z API... 2 1.1. Klucze API... 2 1.2. Podpisywanie wiadomości... 2 1.3. Parametr tonce... 2 1.4. Odpowiedzi serwera... 3 1.5. Przykładowy

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

Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania).

Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania). Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania). W momencie gdy jesteś studentem lub świeżym absolwentem to znajdujesz się w dobrym momencie, aby rozpocząć planowanie swojej ścieżki

Bardziej szczegółowo

Charakterystyka systemów plików

Charakterystyka systemów plików Charakterystyka systemów plików Systemy plików są rozwijane wraz z systemami operacyjnymi. Windows wspiera systemy FAT oraz system NTFS. Różnią się one sposobem przechowywania informacji o plikach, ale

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

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

V. Wymagania dla wsparcia projektu oraz nadzoru eksploatacyjnego... 6

V. Wymagania dla wsparcia projektu oraz nadzoru eksploatacyjnego... 6 ZAŁĄCZNIK NR 5 Postępowania nr EU/12/ZI/ZZ/2011o udzielenie zamówienia w trybie przetargu nieograniczonego na: Opracowanie, wykonanie i wdrożenie SYSTEMU BOOKINGÓW DLA LINII ŻEGLUGOWYCH SPECYFIKACJA TECHNICZNA

Bardziej szczegółowo

Qt sygnały i designer

Qt sygnały i designer Qt sygnały i designer Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2015 Bogdan

Bardziej szczegółowo

Spis treści OPERACJE NA TEKSTACH W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF31

Spis treści OPERACJE NA TEKSTACH W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF31 Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)

Bardziej szczegółowo

Nowe funkcjonalności

Nowe funkcjonalności Nowe funkcjonalności 1 I. Aplikacja supermakler 1. Nowe notowania Dotychczasowe notowania koszykowe, z racji ograniczonej możliwości personalizacji, zostały zastąpione nowymi tabelami z notowaniami bieżącymi.

Bardziej szczegółowo

POLITYKA PRYWATNOŚCI SKLEPU INTERNETOWEGO

POLITYKA PRYWATNOŚCI SKLEPU INTERNETOWEGO POLITYKA PRYWATNOŚCI SKLEPU INTERNETOWEGO www.tokyotey.pl 1. Zagadnienia wstępne. 1. Pod pojęciem Serwisu rozumie się stronę internetową znajdującą się pod adresem www.tokyotey.pl wraz z wszelkimi podstronami

Bardziej szczegółowo

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika Wyklad 6 Typy i zmienne: wskaznikowe, referencyjne Funkcje deklaracja, definicja. Zasieg deklaracji i widocznosc zmiennych Przekazywanie parametrów przez wartosc, referencje i wskaznik Przekazywanie wyniku

Bardziej szczegółowo

Wzorce funkcji (szablony)

Wzorce funkcji (szablony) Wzorce funkcji (szablony) Wzorce funkcji (ang. function template) dają możliwość wielokrotnego wykorzystywania tego samego kodu funkcji dla różnych typów danych. Załóżmy, że chcemy zdefiniować funkcję

Bardziej szczegółowo

KATEDRA INFORMATYKI STOSOWANEJ PŁ ANALIZA I PROJEKTOWANIE SYSTEMÓW INFORMATYCZNYCH

KATEDRA INFORMATYKI STOSOWANEJ PŁ ANALIZA I PROJEKTOWANIE SYSTEMÓW INFORMATYCZNYCH KATEDRA INFORMATYKI STOSOWANEJ PŁ ANALIZA I PROJEKTOWANIE SYSTEMÓW INFORMATYCZNYCH Przygotował: mgr inż. Radosław Adamus 1 1 Na podstawie: Subieta K., Język UML, V Konferencja PLOUG, Zakopane, 1999. Wprowadzenie

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

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

obiekty funkcyjne - funktory

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

Bardziej szczegółowo

Wytyczne dla środków masowego przekazu

Wytyczne dla środków masowego przekazu Wytyczne dla środków masowego przekazu ZASADY korzystania ze znaków PZPN przez środki masowego przekazu Nowe znaki PZPN są jedynie obowiązującymi. Dotychczasowych logotypów można używać wyłącznie do celów

Bardziej szczegółowo

Informatyka, I stopień. Programowanie (PRO300.1)

Informatyka, I stopień. Programowanie (PRO300.1) Uniwersytet Śląski w Katowicach str. 1 Kierunek i poziom studiów: Informatyka, I stopień Sylabus modułu: Programowanie (PRO0.1) Nazwa wariantu modułu (opcjonalnie): 1. Informacje ogólne koordynator modułu

Bardziej szczegółowo

System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy

System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy modelowaniem, a pewien dobrze zdefiniowany sposób jego

Bardziej szczegółowo