Zadanie 1
UWAGA! Do wszystkich projektów należy przygotować dwa programy testujące. Pierwszy - podobnie jak w przypadku pierwszego projektu - powinien pokazywać możliwości klasy. Drugi program powinien testować poprawność napisanego kodu (w wersji minimum należy przygotować plik sprawdzający implementację za pomocą makra assert; inne przykłady użycia makra można znaleźć tutaj). W projektach, w których konieczne jest korzystanie z dynamicznych struktur danych, należy samemu zaimplementować odpowiednią strukturę (proszę w miarę możliwości nie korzystać z dobrodziejstw biblioteki STL). Dodatkowo w każdym z projektów należy skorzystać z metod wirtualnych, np. do wypisywania zawartości zaimplementowanej struktury, itp. Kod źródłowy powinien być udokumentowany w sposób umożliwiający automatyczne wygenerowanie dokumentacji przy użyciu narzędzia doxygen. Zasady dokumentacji można znaleźć tutaj. Należy wybrać dowolny z dostępnych sposobów dokumentowania kodu.
1. (zajęty) Klasa wzorcowa kolejka FIFO oraz wywodzące się z niej kolejki: priorytetowa (elementy usuwane z kolejki zgodnie z priorytetem) i blokująca (FIFO, przy czym elementy zablokowane nie mogą być usuwane z kolejki).
2. (zajęty) Klasa wzorcowa implementująca abstrakcyjny zbiór elementów oraz wywodzące się z niej klasy: zbiór (standardowy - tj. taki, w którym elementy nie mogą się powtarzać) i zbiór z powtórzeniami (w którym - jak wynika z nazwy - elementy mogą się powtarzać).
3. (zajęty) Klasa wzorcowa implementująca operację dwuargumentową i wywodzące się z niej klasy: dodawanie, odejmowanie i mnożenie. Specjalizacja szablonu dla typu string (wynik odejmowania i mnożenia stringów w gestii osoby wykonującej projekt).
4. (zajęty) Klasa wzrocowa implementująca operację sortowania i wywodzące się z niej klasy: sortowanie w porządku malejącym, sortowanie w porządku rosnącym i kolejność losowa.
5. (zajęty) Klasa wzorcowa Figura oraz wywodzące się z niej klasy: trójkąt prostokątny, prostokąt i kwadrat. Figura powinna zawierać składnik ,,piksel'', który na ekranie będzie reprezentowany przez wartość typu, dla którego szablon został zainicjowany.
6. (zajęty) Klasa wzorcowa mapa i wywodzące się z niej klasy: mapa podstawowa (możliwe jest przypisanie tylko jednego elementu do jednego klucza) i mapa wieloelementowa (do klucza można przypisać wiele elementów).
7. (zajęty) Klasa wzorcowa kontener i wywodzące się z niej klasy: wektor (elementy mogą się powtarzać, usuwanie elementów na podstawie pozycji w wektorze) i zbiór (elementy nie mogą się powtarzać, usuwanie elementów na podstawie wartości elementu).
8. Klasa wzorcowa implementująca abstrakcyjną tablicę i wywodzące się z niej klasy: Tablica1D i Tablica2D.
9. (zajęty) Klasa wzorcowa Macierz i wywodzące się z niej klasy: Macierz Trójkątna i Macierz Diagonalna. Klasy powinny umożliwiać dodawanie i odejmowanie elementów macierzy.
10. Klasa wzorcowa Wyjątek i wywodzące się z niej klasy: Wyjątek Twardy (kończący wykonanie programu) i Wyjątek Miękki (wypisujący komunikat ostrzegawczy). Wyjątek miękki powinien posiadać dwa liczniki zliczające liczbę wykonań metody ,,rzuć()'' dla każdego typu specjalizującego osobno oraz dla wszystkich wykonań metody ,,rzuć()'' niezależnie od typu specjalizującego.
11. (zajęty) Klasa wzorcowa Konwerter i wywodzące się z niej klasy: TypDoString i StringDoTyp. Należy skorzystać z biblioteki IOstream.