Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:jimp2:2016:part2:ex:ex3 [2016/05/02 23:40] msl |
pl:dydaktyka:jimp2:2016:part2:ex:ex3 [2019/06/27 15:50] (aktualna) |
| ====== Ćwiczenie 3: Pojemniki - wektor ====== |
| |
| Ćwiczenie to jest częścią większego zadania, które będzie polegać na zaprojektowaniu **szablonów** kilku rodzajów klas pojemnikowych z wykorzystaniem **mechanizmu dziedziczenia** oraz **iteratora** dla tych klas. \\ **Ćwiczenie 3.** polegać będzie na zaprojektowaniu szablonu pojemnika typu **wektor**. |
| |
| ===== Po co ===== |
| |
| * Doskonalenie umiejętności definiowania szablonów. |
| * Utrwalenie umiejętności posługiwania się mechanizmami dziedziczenia, polimorfizmu. |
| * Zapoznanie się z podstawowymi strukturami danych. |
| |
| ===== Oddawanie ćwiczenia ===== |
| * Przed oddaniem ćwiczenia, program należy przetestować używając następującego pliku main: {{:pl:dydaktyka:jimp2:2016:part2:ex:ex3.zip|}} |
| * Powyższy plik wymaga istnienia pliku ''aghInclude.h'' poprzez który włączane są wszystkie niezbędne pliki. |
| |
===== Przebieg ćwiczenia ===== | ===== Przebieg ćwiczenia ===== |
| |
* Inne konieczne metody i/lub operatory wedle uznania. | * Inne konieczne metody i/lub operatory wedle uznania. |
- W klasie **abstrakcyjnej** (**''aghContainer''**) definiujemy **wszystkie** możliwe do zdefiniowania metody. Zaoszczędzi to sporo czasu w kolejnych ćwiczeniach przy tworzeniu klas pochodnych. Metody których ciało **nie** może zostać zdefiniowane w klasie abstrakcyjnej to: **destruktor**, **''remove''**, **''size''**, **''insert''**, **''at''**. Pozostałem metody definiujemy przy pomocy wyżej wymienionych. | - W klasie **abstrakcyjnej** (**''aghContainer''**) definiujemy **wszystkie** możliwe do zdefiniowania metody. Zaoszczędzi to sporo czasu w kolejnych ćwiczeniach przy tworzeniu klas pochodnych. Metody których ciało **nie** może zostać zdefiniowane w klasie abstrakcyjnej to: **destruktor**, **''remove''**, **''size''**, **''insert''**, **''at''**. Pozostałem metody definiujemy przy pomocy wyżej wymienionych. |
- Budujemy klasę **''aghVector''**, która będzie **dziedziczyć** powyższą klasę abstrakcyjną w sposób **publiczny**. Klasa powinna obsługiwać **wszystkie** powyższe metody. <WRAP center round tip 60%> | - Budujemy klasę **''aghVector''**, która będzie **dziedziczyć** powyższą klasę abstrakcyjną w sposób **publiczny**. Klasa powinna obsługiwać **wszystkie** powyższe metody. |
Proszę stosować się do tzw. [[https://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29|reguły trzech]] | |
</WRAP> | |
| |
- Nie ma przymusu tworzenia metod czy też klas specjalizowanych. | - Nie ma przymusu tworzenia metod czy też klas specjalizowanych. |
<WRAP center round tip 60%> | <WRAP center round tip 60%> |
Plik ''catch.h'' jest to [[https://github.com/philsquared/Catch|jedna z najlepszych bibliotek do pisania testów kodu w C++]]. Plik ''ex3main.cpp'' korzysta z niej do testowania dostarczonych implementacji. | Plik ''catch.h'' jest to [[https://github.com/philsquared/Catch|jedna z najlepszych bibliotek do pisania testów kodu w C++]]. Plik ''ex3main.cpp'' korzysta z niej do testowania dostarczonych implementacji. |
| </WRAP> |
| |
| <WRAP center round important 60%> |
| Podczas implementacji klasy ''aghVector'' proszę stosować się do, tzw. [[https://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29|reguły trzech]] |
</WRAP> | </WRAP> |
| |