Szablony, wybrane elementy biblioteki STL



Podobne dokumenty
Wartości domyślne, szablony funkcji i klas

Szablony funkcji i szablony klas

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów klas

Qt po polsku. Bogdan Kreczmer.

Szablon klasy std::vector

Wykład 4 Wybrane zagadnienia programowania w C++

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

Ćwiczenia IV - Kontenery (pojemniki)

Programowanie obiektowe w C++ Wykład 11

Algorytmy i Struktury Danych.

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

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

Funkcje składowe (metody)

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

Kompozycja i dziedziczenie klas

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


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

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

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

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Preprocesor języka C

Zaawansowane programowanie w C++ (PCP)

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

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

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

Wstęp do programowania

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

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

Szablon klasy std::list

Konfiguracja historii plików

Projektowanie klas c.d. Projektowanie klas przykład

Paradygmaty programowania

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

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

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

Operatory na rzecz typu TString

Język C++ wykład VIII

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

Programowanie i struktury danych

Architektura Systemów Komputerowych. Sterowanie programem skoki Przerwania

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

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

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

Konstruktor kopiujacy

Podstawy programowania

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

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

Zaawansowane programowanie w języku C++ Biblioteka standardowa

STA T T A YSTYKA Korelacja

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

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

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

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

G PROGRAMMING. Part #4

Elementy animacji sterowanie manipulatorem

I. LOGICZNE STRUKTURY DRZEWIASTE

STL: Lekcja 1&2. Filozofia STL

Paradygmaty programowania. Paradygmaty programowania

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

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

KLAUZULE ARBITRAŻOWE

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

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY

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

1. Podstawy budowania wyra e regularnych (Regex)

Wstęp do Programowania 2

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

Abstrakcyjny typ danych

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

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

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

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

System do kontroli i analizy wydawanych posiłków

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

Algorytmy i Struktury Danych. Anna Paszyńska

API transakcyjne BitMarket.pl

Kurs programowania. Wykład 9. Wojciech Macyna

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

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

Charakterystyka systemów plików

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

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

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

Qt sygnały i designer

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

Nowe funkcjonalności

POLITYKA PRYWATNOŚCI SKLEPU INTERNETOWEGO

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

Wzorce funkcji (szablony)

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

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

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

obiekty funkcyjne - funktory

Wytyczne dla środków masowego przekazu

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

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

Transkrypt:

Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl 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ą.

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: http://latex-beamer.sourceforge.net

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

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

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

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

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

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;

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

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

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

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

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;

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;

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;

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;

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.

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.

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.

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.

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.

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.

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.

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.

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

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.

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

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

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 ;

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 ;

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;

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

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;

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

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

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;

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.

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.

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.

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;

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

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;

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;

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

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

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

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.

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.

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

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

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

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.

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.

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.

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.

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.

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.

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.

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.

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;

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;

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;

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

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

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

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

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

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

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.

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.

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.

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.

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.

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

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.

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.

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.

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.

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;

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.

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;

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;

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;

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;

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;

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;

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;

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;

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;

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;

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;

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;

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;

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;

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;

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;

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;

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

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

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

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

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

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

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

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

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

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;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Koniec prezentacji Dziękuję za uwagę