Spis treści

Szablony

Szablon funkcji - deklaracja

template <typename Typek>
Typek pewna_funkcja(Typek x)
{
    return x;
}

Szablon klasy - deklaracja

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

Szablon funkcji składowej (metody)

template <typename Typek>
Typek& Klasa<Typek>::Metoda()
{
 
}

Przykład użycia

int a = 5;
a = pewna_funkcja(a);
 
Wielomian w;
Wielomian w2 = pewna_funkcja(w);
 
Klasa<int> obiekt;
Klasa<int> *wsk = new Klasa<int>();

Ważne: kompilator generuje szablon dopiero w momencie jego użycia (dla konkretnego typu). Dlatego kod szablonu musi być dostępny dla kompilatora – zwyczajowo implementacja znajduje się w plikach nagłówkowych *.h.

Ćwiczenie: szablon klasy Wektor

Zaimplementuj szablon klasy Wektor – pojemnik przechowujący dynamiczną kolekcję elementów pewnego typu. Typ elementów jest parametrem szablonu klasy. Wektor udostępnia dostęp do elementów identycznie jak tablica, ale automatycznie zwiększa rozmiar w miarę dodawania nowych elementów.

Klasa Wektor składa się z następujących pól:

Klasa udostępnia następujące metody:

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;
 
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(w2*i);
}
 
cout << "Wyświetlam pewien wielomian : " << wektor_wielomianow[5] << endl;

Napisz program, który wykorzysta klasę Wektor do przechowywania linii tekstu wczytanych z pliku.

Przydatne funkcje:

Zadanie 8: Szablon funkcji

1. Zaimplementuj szablon funkcji o nazwie zamien, która zamienia wartości dwóch obiektów tego samego typu. Funkcja nie zwraca żadnej wartości.
Przykładowo wywołanie funkcji

zamien(a, b)

spowoduje, że obiekt a przyjmie wartość obiektu b, a obiekt b przyjmie wartość obiektu a, zaś poniższa instrukcja powinna zamienić elementy tablicy:

zamien(tab[i], tab[j])

2. Zaimplementuj szablon funkcji sortuj() do porządkowania zawartości wektora od najmniejszego do największego. Funkcję można napisać jako metodę klasy Wektor lub funkcję globalną przyjmującą referencję do wektora. Załóż, że elementy posiadają operator mniejszości < do porównywania. W algorytmie sortowania wykorzystaj funkcję zamien do zamiany pozycji elementów.

Napisz program, który wykorzysta klasę Wektor oraz funkcję sortuj() do posortowania liczb z pliku:

Przykładowy plik z danymi wejściowymi: liczby.txt

Jeśli masz problem z wymyśleniem działającego algorytmu sortowania, skorzystaj z algorytmu sortowania bąbelkowego

Rozwiązanie w postaci plików nagłówkowych *.h i źródłowych *.cpp umieść w Moodle Zadanie 8