Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.

Podobne prezentacje


Prezentacja na temat: "Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty."— Zapis prezentacji:

1 Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka

2 Funkcja zwracająca większą wartość int wieksza(int a,int b) { return (a > b) ? a : b; } int main() { int a,b; a=5; b=2; cout<<wieksza(a,b)<<endl; double c,d; c=2.5; d=2.2; cout<<wieksza(c,d)<<endl; return 0; } 5 2

3 ctrl+c, ctrl+v int wieksza(int a,int b) { return (a > b) ? a : b; } double wieksza(double a,double b) { return (a > b) ? a : b; } int main() { int a,b; a=5; b=2; cout<<wieksza(a,b)<<endl; double c,d; c=2.5; d=2.2; cout<<wieksza(c,d)<<endl; return 0; } 5 2.5

4 Szablon funkcji template typ wieksza(typ a, typ b) { return (a > b) ? a : b; } int main() { int a,b; a=5; b=2; cout<<wieksza(a,b)<<endl; double c,d; c=2.5; d=2.2; cout<<wieksza(c,d)<<endl; return 0; } Parametr szablonu Argumenty funkcji

5 Funkcje szablonowe Kompilator generuje funkcję szablonową gdy: wywołujemy funkcję, odwołujemy się do jej adresu. Funkcja szablonowa z jednym zestawem parametrów generowana jest tylko raz. Podobnie jak w przypadku przeładowań nazw funkcji typ rezultatu funkcji się nie liczy.

6 Kilka przykładów template typ1 wieksza(typ1 a, typ2 b, typ1 c) {…} template typ wieksza(typ a, typ *b) {…} template typ wieksza(typ a, int b) {…} template typ_w wieksza(typ1 a, typ2 b, typ1 c, typ_w) {...}

7 Problemy z typami definiowanymi template typ wieksza(typ a, typ b) { return (a > b) ? a : b; } class zespolona { public: double re,im; }; int main() { zespolona A,B; A.re=5; A.im=2; B.re=1; B.im=3; cout<<wieksza(A,B)<<endl; return 0; }

8 Problemy z typami wbudowanymi template double funkcja(typ a) { double m=a.modul(); return m; } class zespolona { public: double re,im; double modul(){ return sqrt(re*re+im*im);} }; int main() { zespolona A; A.re=5; A.im=2; cout<<funkcja(A)<<endl; cout<<funkcja(1)<<endl; return 0; }

9 Funkcja specjalizowana template typ wieksza(typ a, typ b) { cout<<"Funkcja szablonowa\n"; return (a > b) ? a : b; } int wieksza(int a,int b) { cout<<"Funkcja specjalizowana\n"; return (a > b) ? a : b; } int main() { cout<<wieksza(1,2)<<endl; cout<<wieksza(1.5,2.7)<<endl; return 0; } 2 2.7

10 Kolejność argumentów funkcji template typ1 wieksza(typ1 a, typ2 b) { return (a > b) ? a : b; } int main() { double a=3.5; int b=2; cout<<wieksza(a,b)<<endl; cout<<wieksza(b,a)<<endl; return 0; } 3.5 3

11 Konflikt template typ1 wieksza(typ1 a, typ2 b) { return (a > b) ? a : b; } template typ2 wieksza(typ1 a, typ2 b) { return (a > b) ? a : b; } Szablony różnią się tylko typem zwracanym

12 Obiekty lokalne typu typ template typ dzialanie(typ a, typ b) { typ w; w=3*a+b; return w; } int main() { int a=3; int b=2; cout<<dzialanie(a,b)<<endl; return 0; } 11

13 Typy pochodne template void zmiana(typ &a, typ &b) { typ c=a; a=b; b=c; } int main() { int a=3; int b=2; cout<<a<<b<<endl; zmiana(a,b); cout<<a<<b<<endl; return 0; } 32 23

14 Typy pochodne template void zmiana(typ &a, typ &b) { typ c=a; a=b; b=c; } int main() { char *a="AAA"; char *b="BBB"; cout<<a<<b<<endl; zmiana(a,b); cout<<a<<b<<endl; return 0; } AAABBB BBBAAA

15 Szablon generujący funkcje inline template inline typ wieksza(typ a, typ b) { return (a > b) ? a : b; }

16 Obiekty lokalne statyczne template void funkcja(typ a) { static int licznik=0; licznik++; cout<<licznik<<endl; } int main() { funkcja(1); funkcja(1.0); funkcja(5); funkcja('a'); return 0; } 11211121

17 Run-Time Type Identyfication #include using namespace std; template void funkcja(typ a) { cout<<typeid(a).name()<<endl; } int main() { funkcja(1); funkcja(1.0); funkcja(5); funkcja('a'); return 0; } int double int char

18 Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: http://creativecommons.org/licenses/by-sa/3.0/deed.pl


Pobierz ppt "Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty."

Podobne prezentacje


Reklamy Google