Programowanie obiektowe Wykad 9 Programowanie obiektowe Szablony cz
Programowanie obiektowe Wykład 9 Programowanie obiektowe Szablony cz. II Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMi. I UŁ 1/15
Programowanie obiektowe Wykład 9 Parametry domyślne Definiując szablon możemy dla danego parametru typu ustalić wartość domyślną, tzn. wartość, którą dany parametr osiągnie, gdy podczas konkretyzacji wartość typu zostanie pominięta. template <typename T 1, typename T 2 = char> class A { … }; Jeżeli podczas konkretyzacji szablonu A, nie wskażemy wartości dla parametru typu T 2, zostanie użyty typ char. A<int, double> a 1; A<char*> a 2; //T 1 = int, T 2 = double //T 1 = char*, T 2 = char template <typename T = int> class B { … }; B<string> b 1; // T = string B<> b 2; // T = int dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMi. I UŁ 2/15
Programowanie obiektowe Wykład 9 Wartości domyślne w szablonach funkcji Definiując szablon klasy możemy korzystać zarówno z wartości domyślnych dla parametrów typu jaki i wartości domyślnych dla argumentów wyrażeń (nie-typów). Definiując szablon funkcji możemy używać wartości domyślne co najwyżej dla argumentów wyrażeń. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMi. I UŁ 3/15
Programowanie obiektowe Wykład 9 Niejawna konkretyzacja szablonów W przypadku, gdy na podstawie szablonu deklarujemy obiekt, określając żądany typ, korzystamy z niejawnej konkretyzacji szablonu. W takim przypadku kompilator uszczegóławia definicję klasy według schematu zadanego przez szablon tej klasy. A<int> a; niejawna konkretyzacja szablonu Ponadto kompilator zastosuje niejawną konkretyzację wówczas, gdy zostanie użyty obiekt konkretyzowanej klasy: A<int>* wsk; obiekt klasy jeszcze nie jest użyty, więc brak konkretyzacji wsk = new A<int>(); obiektklasy. A<int>jesttworzony, więcmusinastąpić konkretyzacja szablonu dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMi. I UŁ 4/15
Programowanie obiektowe Wykład 9 Jawna konkretyzacja szablonów Jawna konkretyzacja zachodzi wówczas, gdy podczas deklaracji klasy użyte jest słowo kluczowe template oraz podane są dokładne wartości typów. Definicja takiej klasy jest tworzona nawet jeśli nie tworzony jest obiekt tej klasy. Np. : template class A<double>; //możemy teraz korzystać z klasy A<double> dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMi. I UŁ 5/15
Programowanie obiektowe Wykład 9 Jawne uszczegółowienie szablonu Jawne uszczegółowienie polega na utworzeniu szablonu dla konkretnej wartości typu lub typów. Ma to zastosowanie w przypadku, gdy dla konkretnego typu chcemy zmienić działanie szablonu. template <typename T> class Liczba. TP { private: T x; public: Liczba. TP(T _x) : x(_x) {} T dodaj(Liczba. TP L); }; template <typename T> T Liczba. TP<T>: : dodaj(Liczba. TP L) { return x + L. x; } dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMi. I UŁ 6/15
Programowanie obiektowe Wykład 9 Jawne uszczegółowienie szablonu c. d. template <> class Liczba. TP<char> { private: char x; public: Liczba. TP(char _x) : x(_x) {} char* dodaj(Liczba. TP L); bool czy. Wieksza. Od(const Liczba. TP L); }; char* Liczba. TP<char>: : dodaj(Liczba. TP L) { char* trzy = new char[3]; trzy[0] = x; trzy[1] = L. x; trzy[2] = '