To jest stara wersja strony!
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:
dodająca podany jako argument obiekt typu T
do pojemnika.
Metoda wstawiania elementu do pojemnika:
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:
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:
zwraca wartość w pojemniku. Zakładamy że indeksowanie wartości rozpoczynamy od zera.
Metoda zwracająca ilość elementów:
zwraca ilość elementów w pojemniku.
Metoda usuwająca wybrany element:
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:
usuwa wszystkie elementy pojemnika.
Metoda sprawdzająca czy pojemnik jest pusty:
zwraca true
jeżeli pojemnik jest pusty, inaczej false
.
Metoda wyszukująca element w pojemniku przez wartość od zadanego momentu:
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:
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:
sprawdza czy zawartość pojemników jest taka sama.
Operator nierówności:
sprawdza czy zawartość pojemników jest różna.
Operator
[]
:
zwraca element o indeksie n
.
Operator
+=
:
dopisuje wszystkie elementy z pojemnika right
i zwraca referencje do this
.
Operator
+=
:
dodaje element do pojemnika i zwraca referencje do this
.
Operator
«
:
dodaje element do pojemnika i zwraca referencje do this
.
Operator
«
:
dopisuje wszystkie elementy z pojemnika right
i zwraca referencje do this
.
Operator
«
:
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.
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
aghException
.
Program powinien się poprawnie kompilować i uruchomić wraz z dostarczonymi plikami z paczki
ex3.zip.