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 IleElementowzwraca ilość elementów (nie pojemność wektora)Rozmiarpodaje pojemność wektoraDodajumieszcza element na końcu wektora (jeśli pojemność wektora jest za mała należy ją zwiększyć, np. dwukrotnie).Usunusuwa ostatni element wektora.Wyczyscusuwa 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ę
Dodajpozwalającą dodać element na określonej pozycji. - przeciążoną
Usunusuwającą element z wybranej pozycji.