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.