Szablony

2016-05-11 18:58
Jacek Labudda
												Szablony pozwalają na określenie typów danych będących elementami klasy, struktury, funkcji oraz ich definiowanie.

Szablony klas

Deklaracja szablonu:

template<class type> //szablon class Vector2D{ public: type x, y; //typ danych definiowany przez szablon };
Tak wygląda przykładowy szablon klasy.

Definiowanie szablonu:

Typ danych definiujemy podczas tworzenia nowego obiektu naszej klasy.
Vector2D <int> vector2d; //okreslenie typu
Po stworzeniu takiego obiektu, typem zdefiniowanym przez szablon będzie int. Cały kod programu wraz ze sprawdzeniem działania szablonów wyglądałby następująco:
#include <iostream> using namespace std; template<class type> //szablon class Vector2D{ public: type x, y; //typ danych definiowany przez szablon }; int main(){ Vector2D <int> vector2d_1; //okreslenie typu vector2d_1.x = 10; vector2d_1.y = 15.5; cout << "int: " << vector2d_1.x << " " << vector2d_1.y << endl; Vector2D <float> vector2d_2; //okreslenie typu vector2d_2.x = 10; vector2d_2.y = 15.5; cout << "float: " << vector2d_2.x << " " << vector2d_2.y << endl; return 0; }
Wynik: int: 10 15 float: 10 15.5 Stworzyliśmy dwa obiekty jednej klasy o różnych typach danych w niej zawartych. Za pomocą szablonu zdefiniujemy również wartości zmiennych.
#include <iostream> using namespace std; template<int x, int y> //szablon class Klasa{ public: int X, Y; Klasa(){ X = x; Y = y; } }; int main(){ Klasa <10, 15> obiekt; //definiowanie wartości - zastepuje konstruktor cout << obiekt.X << " " << obiekt.Y << endl; return 0; }

Szablony funkcji

Szablony funkcji można definiować na dwa sposoby. Przy definiowaniu podajemy typ:
#include <iostream> using namespace std; int zmienna; template<class type> //szablon funkcji type funkcja(){ zmienna+=zmienna; //przykladowe dzialanie return zmienna; } int main(){ zmienna = 12; cout << funkcja<int>() << endl; //definicja return 0; }
Wynik: 24 Lub poprzez zdefiniowanie zmiennej będącej argumentem danej funkcji:
#include <iostream> using namespace std; template<class type> //szablon funkcji type funkcja(type zmienna){ zmienna+=zmienna; //przykladowe dzialanie return zmienna; } int main(){ cout << funkcja(12) << endl; //definicja return 0; }
Wynik: 24 Typ przekazany przez szablon będzie taki sam jak typ zdefiniowany w argumencie funkcji. Uwaga! Stosowanie szablonów skraca znacznie ilość linijek kodu. Zatem warto je używać jeśli to możliwe.

Użytkownicy
Logowanie:
Zaloguj
Polub nas na facebooku
Wyszukiwanie na stronie