Szablony

Transkrypt

Szablony
Metody i Języki Programowania w5, ćw.4
mgr inŜ. Paweł Kośla
Szablony
Szablony funkcji/klas słuŜą do definiowania funkcji/klas dla nieokreślonych z góry typów
danych. Dzięki temu podobne klasy (róŜniące się tylko typem danych składowych) zastępowane
są jednym szablonem. W przypadku podobnych funkcji (róŜniących się tylko typem
argumentów) wykorzystywany jest jeden szablon funkcji.
1. Szablony funkcji.
template<lista_typow> typ nazwa_funkcji(typ A, typ B);
Lista typów to np.: typename identyfikator_typu
Słowo kluczowe typename moŜe być zastąpione słowem class.
Przykład:
template<class T> T pow2(T zmienna)
{
return zmienna*zmienna;
}
...main()...
float a = 1.3f;
int b = 2;
pow2<float>(a);
float pow2(float zmienna)
{ return zmienna*zmienna; }
pow2<int>(b);
float pow2(float zmienna)
{ return zmienna*zmienna; }
<float> i <int> moŜe być tu pominięte – konkretyzacja szablonu nastąpi automatycznie na
podstawie typu przekazywanego argumentu.
2. Szablony klas
template<class T> class KlasaSZ
{
T atr1;
T art2;
KlasaSZ(T a1, T a2) { atr1=a1; atr2=a2; }
}
...main()...
KlasaSZ<int> k1(2,4);
KlasaSZ<double> k2(3.4,12.45);
KlasaSZ<Point> k3(Point(1,2), Point(3,4));
UWAGA:W VC6 definicja i deklaracje szablonu klasy umieszczamy łącznie w pliku
nagłówkowym .h
Metody i Języki Programowania w5, ćw.4
mgr inŜ. Paweł Kośla
3. Ćwiczenie
1) Napisz funkcję pow2 dla typu int i float:
int pow2(int a);
float pow2(float a);
2) Następnie napisz szablon funkcji pow2. Wykorzystaj go do typów int i float.
3) Zaprojektuj szablon zamieniający zawartości dwóch zmiennych między sobą:
template<class T>void MySwap(T &a, T &b);
Zastosuj ją dla zmiennych typu int oraz dla np. klasy Punkt z poprzednich ćwiczeń.
4) Przygotuj szablon prostej klasy:
template<class T>
class Para
{
T atr1;
T atr2;
T get(int i) { };
void set(int i, T wart) { };
}
Następnie przetestuj działanie szablonu w funkcji main.
5) Zapoznaj się z szablonem vector z biblioteki standardowej.
Szczególnie wykorzystaj metody:
- insert – wstawia element w podane miejsce wektora
- push_back – wstawia element na koniec wektora
- erase – usuwa element z podanej pozycji wektora
- size – zwraca ilość elementów wektora
- operator[] – odwołuje się do poszczególnych elementów wektora
- clear – kasuje zawartość wektora
Przetestuj ten szablon do przechowywania wartości int oraz innych obiektów.

Podobne dokumenty