Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== Szablony ====== **Szablon funkcji** <code c++> template <class Typek> Typek pewna_funkcja(Typek x) { return x; } </code> **Szablon klasy** <code c++> template <class Typek> class Klasa { Typek *x; void Metoda(); } </code> **Szablon funkcji składowej (metody)** <code c++> template <class Typek> void Klasa<Typek>::Metoda() { } </code> ===== Wzorzec klasy Wektor ===== Zaimplementuj szablon klasy ''Wektor'', która jest pojemnikiem przechowującym dowolną ilość elementów pewnego typu (typ elementów jest parametrem szablonu klasy). 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ę: <code c++> Wektor<int> liczby; for(int i=0;i<100;i++) liczby.Dodaj(i); cout << "Rozmiar " << liczby.Rozmiar() << " elementow " << liczby.IleElementow() << endl; float wsp[]={1,2,3,4,5}; Wielomian w1(wsp,4); Wektor<Wielomian> wektor_wielomianow; for(int i=0;i<100;i++) { Wielomian w2=w1 * liczby[i]; wektor_wielomianow.Dodaj(w*i); } cout << "Wyswietlam pewien wielomian : " << wektor_wielomianow[5] << endl; </code> **Zadania dodatkowe**\\ Dodaj do klasy Wektor: * konstruktor kopiujący * przeciążoną metodę ''**Dodaj**'' pozwalającą dodać element na dowolnej pozycji (od 0 do ''ile_elemntow''). * przeciążoną ''**Usun**'' usuwającą element z wybranej pozycji. Metoda powinna zwracać usuwany element. * dociąż operator << wypisujący zawartość wektora do strumienia (zakładamy, że dla typu składowego wektora istnieje dociążony odpowiednio operator <<) ===== Iterator ===== Dodaj do klasy Wektor: * iterator o swobodnym dostępie ([[http://www.sgi.com/tech/stl/RandomAccessIterator.html|random access iterator]]) * metody begin() i end() zwracające iterator (bezpośredniego dostępu) pokazujący odpowiednio na pierwszy element oraz na pozycję za ostatnim elementem. <note tip> W tym przypadku iterator swobodnego dostępu będzie po prostu wskaźnikiem typu T*. Wystarczy więc przezwać ten typ używając polecenia ''typedef''. </note> Przykładowe użycie: <code c++> Wektor<int> wektor; for(int i=0 ; i<100 ; i++) wektor.Dodaj(i); Wektor<int>::iterator it; for(it=wektor.begin() ; it!=wektor.end() ; it++) cout << *it << endl; </code>