Wartości domyślne, szablony funkcji i klas



Podobne dokumenty
Szablony funkcji i szablony klas

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów klas

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

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

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

Programowanie obiektowe w C++ Wykład 11

Szablony, wybrane elementy biblioteki STL

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

Ćwiczenia IV - Kontenery (pojemniki)

Preprocesor języka C

Kompozycja i dziedziczenie klas

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie


PAKIET MathCad - Część III

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

Qt po polsku. Bogdan Kreczmer.

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

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

KLAUZULE ARBITRAŻOWE

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

Twierdzenie Bayesa. Indukowane Reguły Decyzyjne Jakub Kuliński Nr albumu: 53623

Stanowisko Rzecznika Finansowego i Prezesa Urzędu Ochrony Konkurencji i Konsumentów w sprawie interpretacji art. 49 ustawy o kredycie konsumenckim

DE-WZP JJ.3 Warszawa,

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

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

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

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

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

Ogólna charakterystyka kontraktów terminowych

Konfiguracja historii plików

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

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

PERSON Kraków

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

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

Wtedy wystarczy wybrać właściwego Taga z listy.

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

MATEMATYKA 4 INSTYTUT MEDICUS FUNKCJA KWADRATOWA. Kurs przygotowawczy na studia medyczne. Rok szkolny 2010/2011. tel

Harmonogramowanie projektów Zarządzanie czasem

EGZAMIN MATURALNY Z INFORMATYKI CZERWIEC 2011 POZIOM ROZSZERZONY WYBRANE: CZĘŚĆ I. Czas pracy: 90 minut. Liczba punktów do uzyskania: 20

Umowa o pracę zawarta na czas nieokreślony

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

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

Integracja systemów, integracja procesów

Regu g l u a l min i n w s w pó p ł ó p ł r p acy O ow o iązuje od dnia

Hermetyzacja oraz pola i metody statyczne

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

Firma Informatyczna JazzBIT

Rekompensowanie pracy w godzinach nadliczbowych

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

II. WNIOSKI I UZASADNIENIA: 1. Proponujemy wprowadzić w Rekomendacji nr 6 także rozwiązania dotyczące sytuacji, w których:

*** Przeczytaj najpierw, ponieważ to WAŻNE: ***

VinCent Office. Moduł Drukarki Fiskalnej

Procedura nadawania uprawnień do potwierdzania Profili Zaufanych w Urzędzie Gminy w Ryjewie

Numer obszaru: 13. Jak pracować z uczniem uzdolnionym informatycznie? Od grafiki i multimediów do poważnych algorytmów w środowisku Logomocja-Imagine

UCHWAŁA NR III/21/15 RADY GMINY W KUNICACH. z dnia 23 stycznia 2015 r.

Co nowego w systemie Kancelaris 3.31 STD/3.41 PLUS

Konferencja Sądu Arbitrażowego przy SIDiR WARUNKI KONTRAKTOWE FIDIC KLAUZULA 13 JAKO ODMIENNY SPOSÓB WYKONANIA ROBÓT A NIE ZMIANA UMOWY

OFERTA WYKŁADÓW, WARSZTATÓW I LABORATORIÓW DLA UCZNIÓW KLAS IV- VI SZKÓŁ PODSTAWOWYCH, GIMNAZJALNYCH I ŚREDNICH

Procedura nadawania uprawnień do potwierdzania, przedłuŝania waŝności i uniewaŝniania profili zaufanych epuap. Załącznik nr 1

Edycja geometrii w Solid Edge ST

OSZACOWANIE WARTOŚCI ZAMÓWIENIA z dnia roku Dz. U. z dnia 12 marca 2004 r. Nr 40 poz.356

ZAGADNIENIA PODATKOWE W BRANŻY ENERGETYCZNEJ - VAT

INSTRUKCJA DLA INSPEKTORÓW DS. REJESTRACJI

Warszawska Giełda Towarowa S.A.

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

epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji

Podstawy programowania

Warunki Oferty PrOmOcyjnej usługi z ulgą

Algorytmy i Struktury Danych.

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

Bioinformatyka Laboratorium, 30h. Michał Bereta

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

Rzutowanie i konwersje

zgubił całą naszą korespondencję Można by tak wymieniać bez bezpieczeństwa, gdyby była wykonana dnia poprzedniego rozwiązałaby niejeden problem.

PROCEDURA OCENY RYZYKA ZAWODOWEGO. w Urzędzie Gminy Mściwojów

Regulamin reklamy produktów leczniczych na terenie Samodzielnego Publicznego Zakładu Opieki Zdrowotnej Ministerstwa Spraw Wewnętrznych w Białymstoku

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

Wstęp do Programowania 2

Matematyka dla liceum/funkcja liniowa

Materiał pomocniczy dla nauczycieli kształcących w zawodzie:

Elementy cyfrowe i układy logiczne

Załącznik nr 4 UMOWA O REALIZACJI PRAKTYKI STUDENCKIEJ

Adres strony internetowej, na której Zamawiający udostępnia Specyfikację Istotnych Warunków Zamówienia:

Funkcje składowe (metody)

KONKURS NA NAJLEPSZE LOGO

Przypomnienie najważniejszych pojęć z baz danych. Co to jest baza danych?

Komputer i urządzenia z nim współpracujące

Wykład 4 Wybrane zagadnienia programowania w C++

Regulamin Zarządu Pogórzańskiego Stowarzyszenia Rozwoju

Specyfikacja techniczna banerów Flash

Podstawy Informatyki Gramatyki formalne

Na podstawie art.4 ust.1 i art.20 lit. l) Statutu Walne Zebranie Stowarzyszenia uchwala niniejszy Regulamin Zarządu.

Automatyka. Etymologicznie automatyka pochodzi od grec.

POWIATOWY URZĄD PRACY

Logowanie do systemu Faktura elektroniczna

Transkrypt:

Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy dokument 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

1 Wartości domyślne 2 Podstawowa idea Własności szablonów w praktyce 3 Najważniejsze cechy Proste szablony 4 Ogólna idea

Plan prezentacji Wartości domyślne 1 Wartości domyślne 2 Podstawowa idea Własności szablonów w praktyce 3 Najważniejsze cechy Proste szablony 4 Ogólna idea

Cel Wartości domyślne Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol:

Cel Wartości domyślne Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol:

Cel Wartości domyślne Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol:

Cel Wartości domyślne Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol: Ogólna postać równania: y = ax 2 + b

Implementacja Wartości domyślne float Parabola(float x, float a, float b) return a x x+b;

Implementacja Wartości domyślne float Parabola(float x, float a, float b) return a x x+b; int main() float y, x=5; y = Parabola(x,1,0);

Definiowanie wartości domyślnych float Parabola(float x, float a, float b = 0) return a x x+b; int main() float y, x=5; y = Parabola(x,1,0);

Korzystanie z wartości domyślnych float Parabola(float x, float a, float b = 0) return a x x+b; int main() float y, x=5; y = Parabola(x,1);

Korzystanie z wartości domyślnych float Parabola(float x, float a, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x,1); // Parabola(x,1,0)

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x,1);

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x);

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x); // Parabola(x,1,0)

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x); Co zrobić jeśli chcemy aby a = 2?

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x,2);

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x,2); // Parabola(x,2,0)

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x,2); A jeśli ma być b = 5?

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x,2,5);

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x,2,5); A jeśli chcemy aby a = 1 i b = 5?

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x,5); A jeśli chcemy aby a = 1 i b = 5? Czy można tak?

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x,,5); A jeśli chcemy aby a = 1 i b = 5? A może tak?

Korzystanie z wartości domyślnych float Parabola(float x, float a = 1, float b= 0) return a x x+b; int main() float y, x=5; y = Parabola(x,1,5); Jeśli chcemy zmodyfikować wartość jednego z parametrów domyślnych, to musimy podać wartości wszystkich parametrów, aż do miejsca, na którym występuje zmodyfikowana wartość.

Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m )

Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl;

Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl; PokazOdleglosc(1, 9.81, cm );

Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl; PokazOdleglosc(1, cm ); Czy można to skrócić korzystając z tego, że zadeklarowane wartości domyślne dla a i Jedn są różne od Jedn?

Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl; PokazOdleglosc(1, cm ); Tego typu wywołanie jest niepoprawne. To że parametry są różnego typu nie ma żadnego znaczenia.

Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl; PokazOdleglosc(1, 9.81, cm ); Jedyną poprawną formą jest wypisanie wszystkich wartości parametrów pośrednich, niezależnie od tego czy są one zgodne z wartościami domyślnymi, czy też nie.

Korzystanie z wartości domyślnych void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl; PokazOdleglosc(1); Powróćmy do wywołania funkcji korzystającego z wartości domyślnych

Zapowiedź definicji funkcji PokazOdleglosc(1); void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl;

Zapowiedź definicji funkcji PokazOdleglosc(1); void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl;

Zapowiedź definicji funkcji PokazOdleglosc(1); void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl; Wywołanie funkcji przed jej definicją jest możliwe wtedy i tylko wtedy, gdy wcześniej wystąpi nagłówek zapowiedzi definicji.

Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); PokazOdleglosc(1); void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl; To też nie jest dobrze.

Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); PokazOdleglosc(1); void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ) cout << a pow(t,2)/2 << Jedn << endl; Jeżeli w jednostce translacyjnej występuje zapowiedź definicji z parametrami domyślnymi oraz sama definicja, to wartości tych parametrów mogą być zadeklarowane tylko raz w nagłówku jej zapowiedzi.

Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); PokazOdleglosc(1); void PokazOdleglosc( float t, float a, const char Jedn ) cout << a pow(t,2)/2 << Jedn << endl; Teraz jest już dobrze.

Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); PokazOdleglosc(1); void PokazOdleglosc( float t, float a, const char Jedn ) cout << a pow(t,2)/2 << Jedn << endl;

Zapowiedź definicji funkcji prog.cpp void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); PokazOdleglosc(1); void PokazOdleglosc( float t, float a, const char Jedn ) cout << a pow(t,2)/2 << Jedn << endl; modul.cpp

Zapowiedź definicji funkcji prog.cpp void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); PokazOdleglosc(1); void PokazOdleglosc( float t, float a, const char Jedn ) cout << a pow(t,2)/2 << Jedn << endl; modul.cpp Jeżeli występuje więcej jednostek translacyjnych, to ta sama funkcja może być różnie traktowana w każdej z nich.

Zapowiedź definicji funkcji prog.cpp void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); PokazOdleglosc(1); void PokazOdleglosc( float t, float a = 981, const char Jedn = cm ) cout << a pow(t,2)/2 << Jedn << endl; modul.cpp Wartości parametrów domyślnych mogą być różne w każdej z nich lub w ogóle mogą nie występować. To nie jest jednak dobre rozwiązanie.

Zapowiedź definicji funkcji prog.cpp void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); PokazOdleglosc(1); void PokazOdleglosc( float t, float a = 981, const char Jedn = cm ) cout << a pow(t,2)/2 << Jedn << endl; modul.cpp Wartości parametrów domyślnych mogą być różne w każdej z nich lub w ogóle mogą nie występować. To nie jest jednak dobre rozwiązanie.

Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); PokazOdleglosc(1); void PokazOdleglosc( float t, float a = 981, const char Jedn = cm ) cout << a pow(t,2)/2 << Jedn << endl; modul.hpp prog.cpp modul.cpp Lepszym rozwiązaniem jest wydzielenie pliku nagłówkowe.

Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); #include modul.hpp PokazOdleglosc(1); void PokazOdleglosc( float t, float a = 981, const char Jedn = cm ) cout << a pow(t,2)/2 << Jedn << endl; modul.hpp prog.cpp modul.cpp

Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); #include modul.hpp PokazOdleglosc(1); modul.hpp prog.cpp #include modul.hpp void PokazOdleglosc( float t, float a, const char Jedn ) cout << a pow(t,2)/2 << Jedn << endl; modul.cpp Dodanie pliku nagłówkowego zapobiega niejednoznacznemu traktowania parametrów domyślnych.

Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); #include modul.hpp PokazOdleglosc(1); modul.hpp prog.cpp #include modul.hpp void PokazOdleglosc( float t, float a, const char Jedn ) cout << a pow(t,2)/2 << Jedn << endl; modul.cpp Nie jest to jednak jedyny niezbędny plik nagłówkowy.

Zapowiedź definicji funkcji void PokazOdleglosc( float t, float a = 9.81, const char Jedn = m ); #include modul.hpp PokazOdleglosc(1); modul.hpp prog.cpp #include modul.hpp #include <cmath> void PokazOdleglosc( float t, float a, const char Jedn ) cout << a pow(t,2)/2 << Jedn << endl; modul.cpp

Plan prezentacji Wartości domyślne 1 Wartości domyślne 2 Podstawowa idea Własności szablonów w praktyce 3 Najważniejsze cechy Proste szablony 4 Ogólna idea

Domyślne wartości parametrów dla metod class LZespolona public : float re, im; ; void Zmien(float r, float i) re = r; im = i; LZespolona Z; Z.re = 2.1; Z.im = 0;

Domyślne wartości parametrów dla metod class LZespolona public : float re, im; ; void Zmien(float r, float i) re = r; im = i; LZespolona Z; Z.Zmien(2.1, 0);

Domyślne wartości parametrów dla metod class LZespolona public : float re, im; ; void Zmien(float r, float i) re = r; im = i; LZespolona Z; Z.Zmien(2.1);

Domyślne wartości parametrów dla metod class LZespolona public : float re, im; ; void Zmien(float r, float i = 0) re = r; im = i; LZespolona Z; Z.Zmien(2.1);

Definiowanie metody poza ciałem klasy class LZespolona public : float re, im; ; void Zmien(float r, float i = 0); void LZespolona::Zmien(float r, float i) re = r; im = i; LZespolona Z; Z.Zmien(2.1);

Wartości domyślne versus przeciążenie class LZespolona public : float re, im; ; void Zmien(float r, float i = 0) re = r; im = i; LZespolona Z; Z.Zmien(2.1);

Wartości domyślne versus przeciążenie class LZespolona public : float re, im; ; void Zmien(float r, float i) re = r; im = i; void Zmien(float r) re = r; LZespolona Z; Z.Zmien(2.1);

Plan prezentacji Wartości domyślne 1 Wartości domyślne 2 Podstawowa idea Własności szablonów w praktyce 3 Najważniejsze cechy Proste szablony 4 Ogólna idea

Konstruktor bezparametryczny class LZespolona public : float re, im; ; LZespolona Z1;

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona( ) re = im = 0; LZespolona Z1;

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona( ) re = im = 0; LZespolona Z1; LZespolona Z2(4,6);

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona(float r,float i) re = r; im = i; LZespolona( ) re = im = 0; LZespolona Z1; LZespolona Z2(4,6);

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona(float r = 0, float i = 0) re = r; im = i; LZespolona Z1; LZespolona Z2(4,6);

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona(float r = 0, float i = 0) re = r; im = i; LZespolona Z1; LZespolona Z2(4,6); LZespolona Z3(4);

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona( ) re = im = 0; LZespolona(float r) re = r; im = 0; LZespolona(float r, float i) re = r; im = i; LZespolona Z1; LZespolona Z2(4,6); LZespolona Z3(4);

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona( ) re = im = 0; LZespolona(float r) re = r; im = 0; LZespolona(float r, float i) re = r; im = i; LZespolona Z1; LZespolona Z2(4,6); LZespolona Z3(4);

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona( ) re = im = 0; LZespolona(float r) re = r; im = 0; LZespolona(float r, float i) re = r; im = i; LZespolona Z; Z = 9;

Konsekwencje wartości domyślnych class LZespolona public : float re, im; bool operator == (const LZespolona Z2) const... ; LZespolona( ) re = im = 0; LZespolona(float r) re = r; im = 0; LZespolona(float r, float i) re = r; im = i; LZespolona Z; if ( Z == 7 )...

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona( ) re = im = 0; LZespolona(float r) re = r; im = 0; LZespolona(float r, float i) re = r; im = i; LZespolona FunkcjaZ(LZespolona Z)... double LiczbaD; FunkcjaZ(LiczbaD);

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona( ) re = im = 0; explicit LZespolona(float r) re = r; im = 0; LZespolona(float r, float i) re = r; im = i; LZespolona FunkcjaZ(LZespolona Z)... double LiczbaD; FunkcjaZ(LiczbaD);

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; LZespolona(float r = 0, float i = 0) re = r; im = i; LZespolona FunkcjaZ(LZespolona Z)... double LiczbaD; FunkcjaZ(LZespolona(LiczbaD));

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; explicit LZespolona(float r = 0, float i = 0)... LZespolona FunkcjaZ(LZespolona Z)... double LiczbaD; FunkcjaZ(LZespolona(LiczbaD));

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; explicit LZespolona( ) re = im = 0; explicit LZespolona(float r) re = r; im = 0; explicit LZespolona(float r, float i) re = r; im = i; LZespolona FunkcjaZ(LZespolona Z)... double LiczbaD; FunkcjaZ(LZespolona(LiczbaD));

Konsekwencje wartości domyślnych class LZespolona public : float re, im; ; explicit LZespolona(float r = 0, float i = 0)... LZespolona FunkcjaZ(LZespolona Z)... double LiczbaD; FunkcjaZ(LZespolona(LiczbaD));

Problemy... Wartości domyślne class Wektor public : float x, y; bool operator == (const Wektor W2) const... ; Wektor(float x nowa = 0, float y nowa = 0)... Wektor W; if ( W == 7 )...

Problemy... Wartości domyślne class Wektor public : float x, y; bool operator == (const Wektor W2) const... ; explicit Wektor(float x nowa = 0, float y nowa = 0)... Wektor W; if ( W == 7 )...

Plan prezentacji Wartości domyślne Podstawowa idea Własności szablonów w praktyce 1 Wartości domyślne 2 Podstawowa idea Własności szablonów w praktyce 3 Najważniejsze cechy Proste szablony 4 Ogólna idea

Problemy z tłumaczeniem Podstawowa idea Własności szablonów w praktyce template wzorzec szablon

Problemy z tłumaczeniem Podstawowa idea Własności szablonów w praktyce template wzorzec szablon

Dlaczego szablony? Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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? Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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? Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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++).

Dlaczego szablony? Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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++).

Dlaczego szablony? Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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++).

Dlaczego szablony? Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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.

Dlaczego szablony? Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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.

Dlaczego szablony? Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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.

Plan prezentacji Wartości domyślne Podstawowa idea Własności szablonów w praktyce 1 Wartości domyślne 2 Podstawowa idea Własności szablonów w praktyce 3 Najważniejsze cechy Proste szablony 4 Ogólna idea

Podstawowe cechy Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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.

Podstawowe cechy Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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.

Podstawowe cechy Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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.

Podstawowe cechy Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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.

Wady i zalety Wartości domyślne Podstawowa idea Własności szablonów w praktyce 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.

Plan prezentacji Wartości domyślne Podstawowa idea Własności szablonów w praktyce 1 Wartości domyślne 2 Podstawowa idea Własności szablonów w praktyce 3 Najważniejsze cechy Proste szablony 4 Ogólna idea

Podstawowa idea Własności szablonów w praktyce 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 ; cout << Max(1,2) << endl; cout << Max(1.1, 2.2) << endl; cout << Max( A, B ) << endl; cout << Max( a, b ) << endl;

Podstawowa idea Własności szablonów w praktyce 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 ; cout << Max(1,2) << endl; cout << Max(1.1, 2.2) << endl; cout << Max( A, B ) << endl; cout << Max( a, b ) << endl;

Podstawowa idea Własności szablonów w praktyce 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 ; cout << Max(1,2) << endl; cout << Max(1.1, 2.2) << endl; cout << Max( A, B ) << endl; cout << Max( a, b ) << endl;

własna klasa Podstawowa idea Własności szablonów w praktyce 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? Wektor W1(1,1), W2(4,5), W3; W3 = Max(W1,W2);

własna klasa struct Wektor float x, y; ; Podstawowa idea Własności szablonów w praktyce template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; Wektor W1(1,1), W2(4,5), W3; W3 = Max(W1,W2);

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

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

własna klasa struct Wektor float x, y; ; Podstawowa idea Własności szablonów w praktyce 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. Wektor W1(1,1), W2(4,5), W3; W3 = Max(W1,W2);

Podstawowa idea Własności szablonów w praktyce porównywanie napisów template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; Czy funkcja Max w przypadku napisów będzie działać zgodnie z naszymi oczekiwaniami? cout << Max( Kowalski, Abacki ) << endl;

Podstawowa idea Własności szablonów w praktyce porównywanie napisów template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; Aby mieć porównywanie napisów zamiast wskaźników należy zdefiniować wariant tej funkcji dla przypadku napisów. const char Max( const char s1, const char s2 ) return strcmp(s1,s2) < 0? s2 : s1; cout << Max( Kowalski, Abacki ) << endl;

Podstawowa idea Własności szablonów w praktyce porównywanie napisów template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; Wciąż jednak jest możliwe wywoływanie szablonów poprzez jawną specyfikację jego parametrów. const char Max( const char s1, const char s2 ) return strcmp(s1,s2) < 0? s2 : s1; cout << Max( Kowalski, Abacki ) << endl; cout << Max<const char >( Kowalski, Abacki ) << endl;

Podstawowa idea Własności szablonów w praktyce porównywanie napisów template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; Można jednak pominąć specyfikację parametrów. Wówczas odpowiednie parametry zostaną wydedukowane na podstawie parametrów funkcji. const char Max( const char s1, const char s2 ) return strcmp(s1,s2) < 0? s2 : s1; cout << Max( Kowalski, Abacki ) << endl; cout << Max<const char >( Kowalski, Abacki ) << endl; cout << Max< >( Kowalski, Abacki ) << endl;

Podstawowa idea Własności szablonów w praktyce porównywanie napisów template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; Czy jakoś poprawić szablony, aby nie trzeba było pisać oddzielnej funkcji. const char Max( const char s1, const char s2 ) return strcmp(s1,s2) < 0? s2 : s1; cout << Max( Kowalski, Abacki ) << endl; cout << Max<const char >( Kowalski, Abacki ) << endl; cout << Max< >( Kowalski, Abacki ) << endl;

Podstawowa idea Własności szablonów w praktyce porównywanie napisów template <class Typ> Typ Max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; Dodatkową funkcję trzeba napisać, ale można ujednolicić podejście i zrobić to w ramach danego szablonu tworząc jego specjalizację. template <> const char Max<const char >( const char s1, const char s2 ) return strcmp(s1,s2) < 0? s2 : s1; cout << Max( Kowalski, Abacki ) << endl; cout << Max<const char >( Kowalski, Abacki ) << endl; cout << Max< >( Kowalski, Abacki ) << endl;

Plan prezentacji Wartości domyślne Najważniejsze cechy Proste szablony 1 Wartości domyślne 2 Podstawowa idea Własności szablonów w praktyce 3 Najważniejsze cechy Proste szablony 4 Ogólna idea

Szablony klas Wartości domyślne Najważniejsze cechy Proste szablony 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.

Szablony klas Wartości domyślne Najważniejsze cechy Proste szablony 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.

Szablony klas Wartości domyślne Najważniejsze cechy Proste szablony 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.

Szablony klas Wartości domyślne Najważniejsze cechy Proste szablony 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.

Szablony klas Wartości domyślne Najważniejsze cechy Proste szablony 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.

Ogólna postać szablonu Najważniejsze cechy Proste szablony template < lista-parametrow-rozdzielonych-przecinkami > class Klasa ;...

Ogólna postać szablonu Najważniejsze cechy Proste szablony 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 Najważniejsze cechy Proste szablony 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 Najważniejsze cechy Proste szablony 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 Najważniejsze cechy Proste szablony 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.

Plan prezentacji Wartości domyślne Najważniejsze cechy Proste szablony 1 Wartości domyślne 2 Podstawowa idea Własności szablonów w praktyce 3 Najważniejsze cechy Proste szablony 4 Ogólna idea

Stos Wartości domyślne Najważniejsze cechy Proste szablony 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; Stos St;

Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; Najważniejsze cechy Proste szablony 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; Najważniejsze cechy Proste szablony 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; Najważniejsze cechy Proste szablony 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; Najważniejsze cechy Proste szablony 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; Stos<float> St;

Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; Najważniejsze cechy Proste szablony 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; Stos<double[100]> St;

Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; Najważniejsze cechy Proste szablony 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; Stos<std::string> St;

Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; Najważniejsze cechy Proste szablony 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; Stos<std::istream> St;

Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; Najważniejsze cechy Proste szablony 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; Stos<std::istream> St;

Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; Najważniejsze cechy Proste szablony 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; Stos<std::istream> St;

Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; Najważniejsze cechy Proste szablony 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; Stos<std::istream > St;

Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; Najważniejsze cechy Proste szablony 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; Stos<std::istream&> St;

Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; Najważniejsze cechy Proste szablony 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; Stos<std::istream&> St;

Przykład szablonu stosu template < typename TYP > class Stos TYP Tab[ROZ STOSU]; unsigned int Ilosc; public : Stos( ) Ilosc = 0; Najważniejsze cechy Proste szablony 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; 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; Najważniejsze cechy Proste szablony 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 Najważniejsze cechy Proste szablony 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;

Przykład szablonu stosu Najważniejsze cechy Proste szablony 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; Stos<float, 100> St;

Przykład szablonu stosu Najważniejsze cechy Proste szablony 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; Stos<float, 100> St;

Przykład szablonu stosu Najważniejsze cechy Proste szablony 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; Stos<float> St;

Plan prezentacji Wartości domyślne Ogólna idea 1 Wartości domyślne 2 Podstawowa idea Własności szablonów w praktyce 3 Najważniejsze cechy Proste szablony 4 Ogólna idea

Geneza Wartości domyślne Ogólna idea STL Standard Template Library Twórcą biblioteki jest Alexander Stepanov. Początek prac sięga roku 1979, gdy zaczął wcielać w życie swoją ideę programowania uogólnionego.

Ogólna idea Koniec prezentacji