1=Szablony, wybrane elementy biblioteki STL
Transkrypt
1=Szablony, wybrane elementy biblioteki STL
Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony, wybrane elementy biblioteki STL Bogdan Kreczmer [email protected] Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Programowanie obiektowe c Copyright2016 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ą. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Niniejsza prezentacja została wykonana przy użyciu systemu składu LATEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 Szablony Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 3 Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 Szablony Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 3 Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . public : int &x, &y; int Tab[2]; }; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . public : int &x, &y; int Tab[2]; }; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . int main( ) { Wektor2 W1; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . public : int &x, &y; int Tab[2]; }; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . int main( ) { PP Wektor2 W1; P } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . public : int &x, &y; int Tab[2]; Wektor2( ): x(Tab[0]), y(Tab[1]) { } }; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . int main( ) { Wektor2 W1; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . public : int &x, &y; int Tab[2]; Wektor2( ): x(Tab[0]), y(Tab[1]) { } }; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . int main( ) { Wektor2 Wektor2 W1; W2(W1); } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . public : int &x, &y; int Tab[2]; Wektor2( ): x(Tab[0]), y(Tab[1]) { } }; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . int main( ) { Wektor2 Wektor2 W1; PP W2(W1); P } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi class Wektor2 { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . public : int &x, &y; int Tab[2]; Wektor2( ): x(Tab[0]), y(Tab[1]) { } Wektor2(const Wektor2 &W) . . . }; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . int main( ) { Wektor2 Wektor2 W1; W2(W1); } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi 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 Wektor2 W1; W2(W1); } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi 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 Wektor2 } W1; W2(W1); W1 = W2; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi 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 Wektor2 W1; W2(W1); P } P W1 =P W2; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi 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 Wektor2 } W1; W2(W1); W1 = W2; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Klasy z polami referencyjnymi 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 Wektor2 } W1; W2(W1); W1 = W2; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Podsumowanie (1) 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Podsumowanie (1) 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Podsumowanie (1) 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Podsumowanie (2) 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Podsumowanie (2) 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Podsumowanie (2) 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Podsumowanie (2) 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Podsumowanie (2) 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 Szablony Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 3 Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład prostych operacji int main( ) { std::string Zyczenia; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład prostych operacji int main( ) { std::string Zyczenia; std::string Naglowek = ”Z okazji spotkania Marsjan\n”; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład prostych operacji int main( ) { std::string Zyczenia; std::string Naglowek = ”Z okazji spotkania Marsjan\n”; Zyczenia = Naglowek + ”wszystkiego najlepszego zyczy\n”; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład prostych operacji int main( ) { std::string Zyczenia; std::string Naglowek = ”Z okazji spotkania Marsjan\n”; Zyczenia = Naglowek + ”wszystkiego najlepszego zyczy\n”; Zyczenia += ”Ziemianin”; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład prostych operacji int main( ) { std::string Zyczenia; std::string Naglowek = ”Z okazji spotkania Marsjan\n”; Zyczenia = Naglowek + ”wszystkiego najlepszego zyczy\n”; Zyczenia += ”Ziemianin”; cout << Zyczenia << endl; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład prostych operacji string UniwersalneZyczenia( const char ∗Naglowek, const { string Zyczenia = Naglowek; char ∗Zakonczenie ) Zyczenia += ”wszystkiego najlepszego zyczy\n”; Zyczenia += Zakonczenie; return Zyczenia; } int main( ) { } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład prostych operacji string UniwersalneZyczenia( const char ∗Naglowek, const { string Zyczenia = Naglowek; char ∗Zakonczenie ) Zyczenia += ”wszystkiego najlepszego zyczy\n”; Zyczenia += Zakonczenie; return Zyczenia; } int main( ) { string Zyczenia = UniwersalneZyczenia(”Z okazji spotkania Marsjan ”,”Ziemianin”); cout << Zyczenia << endl; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład prostych operacji string UniwersalneZyczenia( const char ∗Naglowek, const { string Zyczenia = Naglowek; char ∗Zakonczenie ) 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( ); } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład prostych operacji string UniwersalneZyczenia( const char ∗Naglowek, const { string Zyczenia = Naglowek; char ∗Zakonczenie ) 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 ...”; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład prostych operacji string UniwersalneZyczenia( const char ∗Naglowek, const { string Zyczenia = Naglowek; char ∗Zakonczenie ) 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; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przeciążone operatory 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład metod Tworzenie tablic i łańcuchów znakowych w sensie języka C: c str data copy – zwraca łańcuch w sensie języka C, – 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład metod Rozmiar i wielkość łańcucha: length size max size empty – – – – podaje długość łańcucha w sensie języka C, podaje rozmiar łańcucha, podaje maksymalny mo¿liwy rozmiar łańcucha, informuje czy dany łańcuch jest pusty. 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład metod 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”) } Programowanie obiektowe << endl; Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Klasy z polami referencyjnymi Klasa std::string Przykład metod int main() { cout << CzyNalezyDoGrupy(”jk”,”cdrom:x:24:jk,installer,mythtv”) } Programowanie obiektowe << endl; Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) 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”) } Programowanie obiektowe << endl; Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) 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; } 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”) } Programowanie obiektowe << endl; Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 Szablony Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 3 Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Problemy z tłumaczeniem template . & wzorzec szablon Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Problemy z tłumaczeniem template . & wzorzec szablon Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Dlaczego szablony? 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Dlaczego szablony? 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Dlaczego szablony? Problem: Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Możliwe rozwiązania: 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++). Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Dlaczego szablony? Problem: Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Możliwe rozwiązania: 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++). Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Dlaczego szablony? Problem: Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Możliwe rozwiązania: 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++). Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Dlaczego szablony? Problem: Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Możliwe rozwiązania: 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Dlaczego szablony? Problem: Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Możliwe rozwiązania: 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Dlaczego szablony? Problem: Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Możliwe rozwiązania: 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Podstawowe cechy Szablony 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Podstawowe cechy Szablony 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Podstawowe cechy Szablony 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Podstawowe cechy Szablony 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Wady i zalety Zalety: ? Szablony 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony 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 << cout << cout << cout << } Max(1,2) << endl; Max(1.1, 2.2) << endl; Max(’A’,’B’) << endl; Max( a , b ) << endl; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony 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 << cout << cout << cout << } Max(1,2) << endl; Max(1.1, 2.2) << endl; Max(’A’,’B’) << endl; Max( a , b ) << endl; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony funkcji – przykład dla typów wbudowanych template <class Typ> Typ Max( Typ w1, Typ w2 ) { return w1 < w2 ? w2 : w1; } enum W tym przykładzie kompilator generuje kod funkcji Max dla czterech przypadków. Słowo kluczowe class może zostać zastąpione przez typename. Symbole { a=1, b, c }; int main( ) { cout << cout << cout << cout << } Max(1,2) << endl; Max(1.1, 2.2) << endl; Max(’A’,’B’) << endl; Max( a , b ) << endl; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony funkcji – własna klasa 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); } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony funkcji – własna klasa struct Wektor { float x, y; }; 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); Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony funkcji – własna klasa struct Wektor { float x, y; }; W takiej postaci na pewno nie będzie template <class Typ> Typ Max( Typ w1, Typ w2 ) dobrze. Dlaczego? { return w1 < w2 ? w2 : w1; } int main( ) { Wektor W1(1,1), W2(4,5), W3; } W3 = Max(W1,W2); Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony funkcji – własna klasa struct Wektor { float x, y; }; Problemem jest operacja prównania template <class Typ> Typ Max( Typ w1, Typ w2 ) dwóch wektorów. Dlaczego? { return w1 < w2 ? w2 : w1; } int main( ) { Wektor W1(1,1), W2(4,5), W3; } W3 = Max(W1,W2); Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony funkcji – własna klasa struct Wektor { float x, y; }; bool operator < ( const Wektor& W ) const { return x∗x+y∗y < W.x∗W.x+W.y∗W.y; } Aby było dobrze, należy zdefiniować template <class Typ> Typ Max( Typ w1, Typ w2 ) przeciążenie operatora porównania. { return w1 < w2 ? w2 : w1; } int main( ) { Wektor W1(1,1), W2(4,5), W3; } W3 = Max(W1,W2); Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 Szablony Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 3 Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony klas Szablony 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. Szablony pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony klas Szablony 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. Szablony pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony klas Szablony 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. Szablony pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony klas Szablony 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. Szablony pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablony klas Szablony 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. Szablony pozwalają na generowanie i optymalizowania już na etapie kompilacji poprzez użycie specyficznych konstrukcji programistycznych. Umożliwiają realizację idei programowania uogólnionego. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Ogólna postać szablonu template < lista-parametrow-rozdzielonych-przecinkami > class Klasa { ... }; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Ogólna postać szablonu 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Ogólna postać szablonu 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Ogólna postać szablonu 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Ogólna postać szablonu 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. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Stos 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; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } Słowo kluczowe typename sygnalizuje, że parametr szablonu jest typem. Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < class TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<float> } St; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<double[100]> } St; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::string> } St; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::istream> } St; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::istream> } St; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) { Ilosc = 0; } bool Pobierz(TYP& El) P Tab[−− Ilosc], true; } P= { return ! Ilosc ? false : El P }; bool Poloz(const TYP& El) P { return Ilosc >= ROZ STOSU ? false : Tab[ Ilosc++] =PEl, true; } P int main( ) { Stos<std::istream> } St; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::istream∗> } St; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::istream&> } St; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos<std::istream&> } St; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } int main( ) { Stos< Stos< Stos< char[20] } >>> Programowanie obiektowe St; Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP > class Stos { TYP Tab[ROZ STOSU]; 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 >= ROZ STOSU ? false : Tab[ Ilosc++] = El, true; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP, unsigned int Rozmiar 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; } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu template < typename TYP, unsigned int Rozmiar 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; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu 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; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Przykład szablonu stosu 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; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 Szablony Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 3 Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 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 { return TYP& operator [ ] (int Ind) }; std::ostream & operator std::istream & operator #endif << >> Wsp[Ind]; } Wsp[Ind]; } (std::ostream & StrmWy, const Wektor & Wek); (std::istream & StrmWe, Wektor & Wek); Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 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) Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 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]; } { return Wsp[Ind]; } Typ& operator [ ] (unsigned int Ind) }; #endif Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 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) { ... } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 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) { ... } Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 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) { ... } ... Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 Szablony Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 3 Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Szablon klasy Wektor w UML 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]; } }; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML Klasa będąca instancją szablonu 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; Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 Szablony Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 3 Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Klasa będąca instancją szablonu vector deque – – list forward list array string – – – – dynamiczna tablica, kolejka wspierająca swobodny dostęp do dowolnego elementu, lita dwukierukowa, lista jednokierunkowa, tablica o stałym rozmiarze, kontener znakowy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 Szablony Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 3 Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Klasa będąca instancją szablonu vec.front( ) vec.back( ) vec[ i ] vec.at( i ) – – – – zwraca pierwszy element, zwraca ostatni element, zwraca i-ty element (zakres nie jest sprawdzany), zwraca i-ty element (zakres jest sprawdzany, w przypadku błędu zgłaszany jest wyjątek out of range), vec.push back(e) – vec.pop back( ) – dodaje na koniec kopie elementu e (może powodowaæ realokację pamięci), usuwa ostatni element i nie zwraca go (może powodowaæ realokację pamięci), vec.size( ) vec.max size( ) – – zwraca aktualną liczbę elementów, zwraca największą możliwą ilość elementów jaką można zaalokować, Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Klasa będąca instancją szablonu vec.begin( ) vec.end( ) vec.rbegin( ) – – – vec.rend( ) – zwraca iterator wskazujący na pierwszy element, zwraca iterator wskazujący na pozycję za ostatnim elementem, zwraca iterator dla iteracji odwrotnej wskazujący na ostatni element, 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 Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Plan prezentacji 1 Konstruktory i operatory domyślne Klasy z polami referencyjnymi Klasa std::string 2 Szablony Szablony funkcji – Podstawowa idea Szablony klas Od klasy do szablonu – klasa Wektor Reprezentacja szablonów w UML 3 Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Zbiór punktów struct Wektor { int x, y; }; class ZbiorPunktow { public : ... private : unsigned int Rozmiar; Wektor ∗ wPunkty; ... }; ... Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Obiekt z dynamiczną tablicą elementów Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Przeglądanie tablicy Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Kontentery o różnej organizacji Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Kontentery o różnej organizacji Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Kontentery o różnej organizacji Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Iterator – zunifikowane przeglądanie kolekcji elementów Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Iterator – zunifikowane przeglądanie kolekcji elementów Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Iterator – zunifikowane przeglądanie kolekcji elementów Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Szablony o dostępie sekwencyjnym Szablon std::vector<> Jak przeglądać kolekcje – idea iteratora Iterator – zunifikowane przeglądanie kolekcji elementów Programowanie obiektowe Szablony, wybrane elementy biblioteki STL Konstruktory i operatory domyślne Szablony Wybrane klasy z bilioteki standardowej szablonów (STL) Koniec prezentacji Dziękuję za uwagę Programowanie obiektowe Szablony, wybrane elementy biblioteki STL