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()
{
 
}

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.