Szablony

Szablon funkcji

template <class Typek> T& pewna_funkcja(Typek x) { return x; }

Szablon klasy

template <class Typek> class Klasa { Typek *x; void Metoda(); }

Szablon funkcji składowej (metody)

template <class Typek> void Klasa<Typek>::Metoda() { }

Wzorzec klasy Wektor

Zaimplementuj szablon klasy Wektor, który w dynamicznie przydzielonej tablicy o określonym rozmiarze, przechowuje elementy dowolnego typu. Klasa ta powinna implementować następujące metody:

konstruktor domyślny, inicjuje Wektor o pojemności 20 elementów.

konstruktor Wektor(int rozmiar) inicjuje wektor o podanej pojemności

operator [] pozwalający odwołać się do konkretnego elementu wektora

IleElementow zwraca ilość elementów (nie pojemność wektora)

Rozmiar podaje pojemność wektora

Dodaj umieszcza element na końcu wektora (jeśli pojemność wektora jest za mała należy ją zwiększyć, np. dwukrotnie).

Usun usuwa ostatni element wektora.

Wyczysc usuwa wszystkie elementy z wektora

destruktor

Przykładowy kod testujący klasę:

Wektor<int> liczby; for(int i=0;i<100;i++) liczby.Dodaj(i); cout << "Rozmiar " << liczby.Rozmiar() << " elementow " << liczby.IleElementow() << endl; Wektor<Kwadrat> wektor_kwadratow; for(int i=0;i<100;i++) { Kwadrat k(liczby[i]); wektor_kwadratow.Dodaj(k); } cout << "Pole kwadratu o boku " << liczby[5] << " wynosi " << wektor_kwadratow[5].Pole() << endl;

Zadania dodatkowe
Dodaj do klasy Wektor:

konstruktor kopiujący

przeciążoną metodę Dodaj pozwalającą dodać element na określonej pozycji.

przeciążoną Usun usuwającą element z wybranej pozycji.