Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

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]
Linia 1: Linia 1:
-===== Przebieg ćwiczenia ===== 
- 
-  - Definiujemy szablon klasy bazowej (**''​aghContainer''​**),​ od której będą się wywodzić pozostałe klasy pojemnikowe 
-  - Klasa bazowa **nie może** posiadać **żadnych** pól składowych ponieważ w klasach pochodnych sposób gromadzenia i przechowywania danych może być **różny** (porównaj: wektor, lista, stos, drzewo). 
-  - Indeksowanie elementów rozpoczynamy od **zera**. 
-  - **Obowiązkowe** metody jakie **muszą** znaleść się w definicji szablonu klasy **podstawowej** to: 
-    * Metodę dodawania elementu do pojemnika: 
-      * <code cpp>void append(T const&​);</​code>​ dodająca podany jako argument obiekt typu **''​T''​** do pojemnika. 
-    * Metoda wstawiania elementu do pojemnika: 
-      * <code cpp>bool insert(int, T const&​);</​code>​ wstawiająca obiekt typu **''​T''​** w wybrane miejsce. Zwraca **''​true''​** jeżeli podane miejsce wstawienia jest **prawidłowe**,​ w przeciwnym wypadku zwraca **''​false''​**. 
-    * Metoda podmiany elementu w pojemniku: 
-      * <code cpp>bool replace(int,​ T const&​);</​code>​ podmienia obiekt typu **''​T''​** z obiektem na wybranym miejscu. Zwraca **''​true''​** jeżeli podane miejsce podmiany jest **prawidłowe**,​ w przeciwnym wypadku zwraca **''​false''​**. 
-    * Metoda zwracająca wartość elementu: 
-      * <code cpp>​T&​ at(int) const;</​code>​ zwraca wartość w pojemniku. Zakładamy że indeksowanie wartości rozpoczynamy **od zera**. 
-    * Metoda zwracająca ilość elementów: 
-      * <code cpp>int size(void) const;</​code>​ zwraca ilość elementów w pojemniku. 
-    * Metoda usuwająca wybrany element: 
-      * <code cpp>bool remove(int);</​code>​ usuwa element na danym miejscu. Zwraca **''​true''​** jeżeli podane miejsce usunięcia jest **prawidłowe**,​ w przeciwnym wypadku zwraca **''​false''​**. 
-    * Metoda opróżniająca pojemnik: 
-      * <code cpp>void clear(void);</​code>​ usuwa wszystkie elementy pojemnika. 
-    * Metoda sprawdzająca czy pojemnik jest pusty: 
-      * <code cpp>bool isEmpty(void);</​code>​ zwraca **''​true''​** jeżeli pojemnik jest pusty, inaczej **''​false''​**. 
-    * Metoda wyszukująca element w pojemniku przez wartość od zadanego momentu: 
-      * <code cpp>int indexOf(T const& _value, int _from = 0) const;</​code>​ wyszukuje i zwraca indeks pierwszego elementu o wartości ''​_value''​ zaczynając od elementu ''​_from''​. Jeżeli takiego elementu nie ma to zwraca ''​-1''​. 
-    * Metoda sprawdzająca czy dany element jest już w pojemniku: 
-      * <code cpp>bool contains(T const& _value, int _from = 0) const;</​code>​ zwraca **''​true''​** jeżeli element o wartości ''​_value''​ znajduje się w pojemniku inaczej zwraca **''​false''​**. Wyszukiwanie rozpoczyna się od elelmetnu ''​_from''​. 
-    * Oraz operatory: 
-      * Operator przypisania. 
-      * Operator porównania:<​code cpp>bool operator==(aghContainer<​T>​ const& right);</​code>​ sprawdza czy zawartość pojemników jest taka sama. 
-      * Operator nierówności:<​code cpp>bool operator!=(aghContainer<​T>​ const& right);</​code>​ sprawdza czy zawartość pojemników jest różna. 
-      * Operator ''​[]'':<​code cpp>​T&​ operator[](int n) const;</​code>​ zwraca element o indeksie ''​n''​. 
-      * Operator ''​+='':<​code cpp>​aghContainer<​T>&​ operator+=(aghContainer<​T>​ const& right);</​code>​ dopisuje wszystkie elementy z pojemnika ''​right''​ i zwraca referencje do **''​this''​**. 
-      * Operator ''​+='':<​code cpp>​aghContainer<​T>&​ operator+=(T const& element);</​code>​ dodaje element do pojemnika i zwraca referencje do **''​this''​**. 
-      * Operator ''<<'':<​code cpp>​aghContainer<​T>&​ operator<<​(T const& element);</​code>​ dodaje element do pojemnika i zwraca referencje do **''​this''​**. 
-      * Operator ''<<'':<​code cpp>​aghContainer<​T>&​ operator<<​(aghContainer<​T>​ const& right);</​code>​ dopisuje wszystkie elementy z pojemnika ''​right''​ i zwraca referencje do **''​this''​**. 
-      * Operator ''<<'':<​code cpp>​ostream&​ operator<<​(ostream&,​ aghContainer<​T>​ const& right);</​code>​ wypisuje zawartość pojemnika na strumień. 
-    * 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. 
-  - 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%> 
-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. 
-  - Rozmiar wektora powinien być zmieniany dynamicznie. 
-  - Program powinien mieć budowę **modułową**. 
-  - **Nie dublujemy** kodu, tzn. nie piszemy dwa i więcej razy kodu, który wykonuje podobne zadania - **ta kwestia będzie ważnym kryterium oceny jakości kodu**. 
-  - Do realizacji ćwiczenia **nie można** wykorzystywać już gotowych rozwiązań (STL, boost, Qt, itp.). 
-  - Zaistniałe nieprawidłowe sytuacje powinny zostać obsłużone poprzez wyrzucenie wyjątku przy pomocy klasy **''​[[..:​org:​codepolicy#​obsluga_wyjatkow|aghException]]''​**. 
-  - Program powinien się poprawnie kompilować i uruchomić wraz z dostarczonymi plikami z paczki {{:​pl:​dydaktyka:​jimp2:​2016:​part2:​ex:​ex3.zip|}}. 
- 
-<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. 
-</​WRAP>​ 
  
pl/dydaktyka/jimp2/2016/part2/ex/ex3.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0