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

Podobne dokumenty
Zaawansowane programowanie w języku C++ Przeciążanie operatorów

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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Zaawansowane programowanie w języku C++ Wyjątki

Szablony funkcji i szablony klas

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Szablony funkcji i klas (templates)

Architektura komputerów Wprowadzenie do algorytmów

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Szablony. Szablony funkcji

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

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

Zaawansowane programowanie w języku C++ Wstęp

Zaawansowane programowanie w C++ (PCP)

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

C++ Przeładowanie operatorów i wzorce w klasach

Systemy operacyjne na platformach mobilnych 2 Platforma Maemo

Architektura komputerów Reprezentacja liczb. Kodowanie rozkazów.

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

Studia podyplomowe realizowane w ramach zadania 5 Systemy mobilne i techniki multimedialne

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

Szablony klas, zastosowanie szablonów w programach

Co nie powinno być umieszczane w plikach nagłówkowych:

Systemy operacyjne na platformach mobilnych 2 Podstawy obsługi powłoki Bash

Abstrakcyjny typ danych

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

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

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Wprowadzenie do szablonów klas

dr inż. Małgorzata Langer Architektura komputerów

Układy reprogramowalne i SoC Implementacja w układach FPGA

Zofia Kruczkiewicz, ETE8305_2 1

Qt sygnały i designer

Języki i techniki programowania Ćwiczenia 4 Wzorce

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

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

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

Wstęp do Programowania 2

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

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

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

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

Systemy operacyjne na platformach mobilnych 3 Wstęp do systemu Android

Stos liczb całkowitych

Etapy kompilacji. Wykład 7. Przetwarzanie wstępne, str. 1. #define ILE for(i=0; i<ile; i++)...

Wzorce funkcji (szablony)

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

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wstęp do Programowania, laboratorium 02

Projektowanie klas c.d. Projektowanie klas przykład

Mikrosystemy Wprowadzenie. Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt.

Zaawansowane programowanie w C++ (PCP)

Podstawy Programowania Obiektowego

Język C++ Programowanie obiektowe

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

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

PROGRAMOWANIE w C prolog

Medical electronics part 9a Electroencephalography (EEG)

Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

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

Aplikacje w środowisku Java

Klasy abstrakcyjne i interfejsy

Funkcja (podprogram) void

Podstawy programowania skrót z wykładów:

Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego.

Laboratorium 3: Preprocesor i funkcje ze zmienną liczbą argumentów. mgr inż. Arkadiusz Chrobot

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

TEMAT : KLASY DZIEDZICZENIE

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Zaawansowane programowanie obiektowe - wykład 5

Inżynieria Wytwarzania Systemów Wbudowanych

Podział programu na moduły

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

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

Style programowania - krótki przeglad

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

Wartości domyślne, szablony funkcji i klas

Architektura komputerów Historia systemów liczących

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

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

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

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

Układy reprogramowalne i SoC Język VHDL (część 4)

Języki i metody programowania Java. Wykład 2 (część 2)

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Wartości domyślne, przeciażenia funkcji

Konstruktor kopiujacy

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

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Transkrypt:

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego

Wzorce Cel: możliwość pisania kodu niezależnego od typów danych Środki: Definicje makro preprocesora Dziedziczenie i polimorfizm Wzorce Wzorce są to funkcje lub klasy napisane w sposób pozwalający na ich użycie z niezdefiniowanymi w momencie pisania typami (tzw. programowanie uogólnione). 2

Warsztat funkcja min Cel: napisanie funkcji zwracającej najmniejszy argument działającej z dowolnym typem, np: min( 1, 3 ), min( 2.0, -1 ), min( "jeden, "dwa" ), Algorytm: if ( arg1 < arg2 ) return arg1; else return arg2; 3

Makro definicja #define min(arg1, arg2) ( (arg1 < arg2)? arg1 : arg2 ) int a = 2, b = 5; int m = min( a, b ); Zalety: Wady:... 4

Dygresja: słowo kluczowe inline Słowo inline służy do wskazania kompilatorowi funkcji lub metod, które chcielibyśmy rozwijać w miejscu wywołania (analogia do makro definicji) Inline jest tylko wskazówką dla kompilatora, który sam podejmuje decyzję, czy dana funkcja będzie rozwijana czy nie Funkcje i metody typu inline należy definiować w pliku nagłówkowym Zastosowanie:... 5

Funkcja min wersja dla typu int inline int min( const int arg1, const int arg2) { } return (arg1 < arg2)? arg1 : arg2; int a = 2, b = 5; int m = min( a, b ); Zalety: Wady:... 6

Uogólniona wersja funkcji min template< class T > inline const T min( const T arg1, const T arg2) { } return (arg1 < arg2)? arg1 : arg2; int a = 2, b = 5; int m = min( a, b ); Zalety: Wady:... 7

Lepsza wersja uogólnionej funkcji min template< class T > inline const T& min( const T& arg1, const T& arg2) { } return (arg1 < arg2)? arg1 : arg2; int a = 2, b = 5; int m = min( a, b ); Zalety: Wady:... 8

Różne wywołania funkcji min min( 4, 1 ); min( 4.0, 1 ); min< float >( 4, 1 ); min( "jeden", "dwa" ); min<std::string>( "jeden", "dwa" ); Czy to działa? 9

Specjalizacja wzorca Często zachodzi potrzeba zdefiniowania specyficznego zachowania funkcji uogólnionej dla danego typu: Dany typ ma inny interfejs Dany typ ma inne znaczenie logiczne Optymalizacja (np. std::vector<bool>) W takich przypadkach należy przepisać ponownie funkcję uogólnioną dla konkretnego typu danych. Kompilator wszędzie tam gdzie wystąpią podane przez nas w specjalizacji funkcji typy danych użyje wersji wyspecjalizowanej, a nie ogólnej funkcji 10

Specjalizacja funkcji min dla typu std::string template< class T > inline const T& min( const T& arg1, const T& arg2 ) { return (arg1 < arg2)? arg1 : arg2; } template<> inline const std::string& min( const std::string& arg1, const std::string& arg2 ) { return ( arg1.size() < arg2.size() )? arg1 : arg2; } 11

Warsztat Wzorce, a wielkość pliku wynikowego Wzorce, a czas trwania kompilacji 12

Parametry wzorców inne niż typ Możliwe jest przekazanie do wzorca danej funkcji nie typu lecz wartości Przykład: template<size_t size> inline void xchg( char *src, char *dst ) { char buffer[size];... return; } 13

Domyślne parametry wzorców Wzorzec funkcji może mieć wśród listy swoich parametrów parametry domyślne Parametry domyślne zachowują się identycznie jak domyślne argumenty funkcji. Przykład: template<size_t size, class T = char*> inline void xchg( T src, T dst ) { } char buffer[size];... return; 14

Klasy wzorcowe Język C++ umożliwia parametryzowanie nie tylko funkcji ale też klas, dzięki czemu można projektować kontenery niezależne od przechowywanych typów danych Najprostszym przykładem wzorca klasy jest parametryzowana struktura: template< class T > struct ListNode { }; T node; ListNode<T> *next; ListNode<T> *prev; 15

Wzorzec klasy kontenera template< class T > class Container { private: T value; public: Container() : T() {} Container( T& copy ) : T( copy ) {} Container( const Container<T>& copy ) : T( copy.value ) {}... }; 16

Wzorce - podsumowanie Zalety: Możliwość definiowania funkcji i klas niezależnych od typów danych, które przetwarzają lub przechowują Bezpieczeństwo typów! Wielokrotne wykorzystanie kodu Możliwość tworzenia wszechstronnych bibliotek (biblioteka standardowa języka C++) Wady: Zwiększony rozmiar aplikacji po skompilowaniu Dłuższa kompilacja Wzorce nie zawsze są dostępne (np. embedded C++) 17

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego