Wprowadzenie do szablonów szablony funkcji

Podobne dokumenty
Wprowadzenie do szablonów szablony funkcji

Szablony funkcji i szablony klas

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Konstruktor kopiujacy

Pola i metody statyczne

Wyliczanie wyrażenia obiekty tymczasowe

Wartości domyślne, szablony funkcji i klas

Szablon klasy std::list

Style programowania - krótki przeglad

Referencje do zmiennych i obiektów

Przesłanianie nazw, przestrzenie nazw

Wprowadzenie do szablonów klas

Szablon klasy std::vector

Operacje wejścia/wyjścia odsłona pierwsza

Rzutowanie i konwersje

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii

Lista dwukierunkowa - przykład implementacji destruktorów

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

Style programowania - krótki przeglad

Szablony funkcji i klas (templates)

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

Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

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

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

Szablony. Szablony funkcji

Podejście obiektowe - podstawowe pojęcia

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

Obiekty i metody stałe

Qt sygnały i designer

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

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

Podstawy Programowania Obiektowego

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

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

Zaawansowane programowanie w C++ (PCP)

Wstęp do Programowania 2

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

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

Geneza powstania języka C++

Abstrakcyjny typ danych

Geneza powstania języka C++

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

Programowanie Obiektowew języku C++ Zadania L4

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

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

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

Do czego służą klasy?

TEMAT : KLASY DZIEDZICZENIE

Język ludzki kod maszynowy

Wstęp do programowania

Szablony klas, zastosowanie szablonów w programach

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Paradygmaty programowania

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

Praca z aplikacją designer

Wprowadzenie do programowanie obiektowego w języku C++

KLASY cz.1. Dorota Pylak

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Hermetyzacja oraz pola i metody statyczne

Do czego służą klasy?

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Przykład zastosowania przeciażeń operatorów i metod stałych - szukanie punktu przecięcia z wielobokiem

Wstęp do Programowania 2

Wprowadzenie do UML, przykład użycia kolizja

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

Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie, część I

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

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

Kurs programowania. Wykład 9. Wojciech Macyna

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Diagramy UML, przykład problemu kolizji

Zaawansowane programowanie w C++ (PCP)

Organizacja kursu, paradygmaty, ogólnie o C i C++

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Programowanie w języku C++

Schemat konstrukcja pliku Makefile

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

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

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

Stos liczb całkowitych

Wstęp do programowania obiektowego. Wykład 2

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie, część I

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Zaawansowane programowanie w języku C++ Klasy w C++

Wstęp do Programowania 2

Wyjątki (exceptions)

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Programowanie obiektowe w C++ Wykład 12

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Transkrypt:

Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłacznie do własnych prywatnych potrzeb i może on być kopiowany wyłacznie w całości, razem z niniejsza strona tytułowa.

Separacja kodu i typów W językach takich jak C i Pascal mamy do czynienia z separacja kodu i typu parametrów. Wartości z jakimi wywoływane sa funkcje i procedury moga parametryzować ich działanie. Jednak ich typy zostaja ustalone raz na zawsze w momencie ich definicji. Problem: Należy zaimplementować algorytm sortowania dla obiektów różnych typów. Możliwe rozwiazania: 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. C/C++). cpp dla Najlepszym rozwiazaniem dla postawionego problemu jest koncepcja szablonów. Copyright c 2006 2010 Bogdan Kreczmer Wprowadzenie do szablonów szablony funkcji 1

Podstawowe cechy Szablony pozwalaja na definiowanie funkcji, których typy parametrów sa także parametrami tych funkcji. Możliwe jest definiowanie klas, które parametryzowane moga być typami pól występujacych 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 tworzac 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. Copyright c 2006 2010 Bogdan Kreczmer Wprowadzenie do szablonów szablony funkcji 2

Podstawowe cechy Zalety: Szablony daja 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 pozwalaja zachować ścisła kontrolę typów w trakcie kompilacji. Wady: Brak możliwości tworzenia oddzielnych jednostek kompilacji (modułów) w postaci czystych szablonów. Copyright c 2006 2010 Bogdan Kreczmer Wprowadzenie do szablonów szablony funkcji 3

Szablon funkcji 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; Wynik działania: 2 2.2 B 2 W tym przykładzie kompilator generuje kod funkcji max dla czterech przypadków. Słowo kluczowe class może zostać zastapione przez typename. Copyright c 2006 2010 Bogdan Kreczmer Wprowadzenie do szablonów szablony funkcji 4

Szablon funkcji struct Wektor //.................................................................... float x, y; Wektor( float x = 0, float y = 0 ): x(x), y(y) bool operator < ( const Wektor& W ) const return x x+ y y < W. x W. x+w. y W. y; ; //................................................................................... template < typename Typ > Typ max( Typ w1, Typ w2 ) return w1 < w2? w2 : w1; int main( ) Wektor W1(1,1), W2(-2,1); W1 = max( W1, W2 ); cout << W1. x <<, << W1. y << endl; Wynik działania: -2, 1 Szablon funkcji można wykorzystywać dla własnych klas, o ile wszystkie realizowane w nim operacje będa legalne. Copyright c 2006 2010 Bogdan Kreczmer Wprowadzenie do szablonów szablony funkcji 5

Szablon funkcji template <typename Typ> Typ max( Typ w1, Typ w2 ) return cout << S:, w1 < w2? w2 : w1; const char max( const char s1, const char s2 ) return cout << F:, std::strcmp(s1,s2) < 0? s2 : s1; int main( ) cout << max( Abacki, Kowalski ) << endl; cout << max<const char >( Abacki, Kowalski ) << endl; cout << max<>( Abacki, Kowalski ) << endl; Wynik działania: F: Kowalski S: Abacki S: Abacki Funkcje zdefiniowane przez szablony moga być przeciażone zwykłymi funkcjami. Można jednak wymusić użycie funkcji zdefiniowanej przez szablon. Copyright c 2006 2010 Bogdan Kreczmer Wprowadzenie do szablonów szablony funkcji 6

Szablon funkcji template <typename Typ> Typ max( Typ w1, Typ w2 ) return cout << S:, w1 < w2? w2 : w1; template <> const char max<const char >(const char s1, const char s2) return cout << F:, std::strcmp(s1,s2) < 0? s2 : s1; int main( ) cout << max( Abacki, Kowalski ) << endl; cout << max<const char >( Abacki, Kowalski ) << endl; cout << max<>( Abacki, Kowalski ) << endl; Wynik działania: F: Kowalski F: Kowalski F: Kowalski Można tworzyć specjalizację szablonu funkcji dla wybranego typu. Copyright c 2006 2010 Bogdan Kreczmer Wprowadzenie do szablonów szablony funkcji 7