з головним елементос, зокрема оператори зсуву покажчика, отримання доступу до поточного елементу, повернення покажчика у вихідне положення і перевірки на досягнення покажчиком кінця списку.
Ще список має поля cur і first, що вказують на поточний і головний елементи списку.
Клас TReverseIterator (итератор зворотного обходу)
Даний клас має єдиний конструктор, який отримує на вхід константну посилання на контейнер списку і реалізовану функцію nothing, що показує можливість створення об'єктів даного класу.
Також реалізуються оператори, що дозволяють працювати з контейнером як з односпрямованим списком з головним елементос, зокрема оператори зсуву покажчика, отримання доступу до поточного елементу, повернення покажчика у вихідне положення і перевірки на досягнення покажчиком кінця списку.
Ще список має поля cur і first, що вказують на поточний і головний елементи списку.
Особливість даного ітератора полягає в тому, що він дозволяє працювати зі списком у зворотному порядку: головним елементом стає останній елемент списку, а рух відбувається в напрямку від останнього до початковому елементу контейнера.
Клас TListException (клас винятків)
Даний клас дозволяє створювати і обробляти виняткові ситуації, що відбуваються при роботі зі списком: вихід за межі списку, видалення неіснуючого елемента і т.п.
Клас має поля errmsg і errnum типу char * і int відповідно, що носять інформацію про поточну виняткової ситуації (текст і код помилки), і методи GetMessage і GetCode для подальшої обробки помилки в залежності від ситуації. Ще в класі реалізована операція виведення інформації про помилку в потік.
.4 Визначення відносин між класами
Клас TBasicIterator є базовим для класів TLineIterator, TReverseIterator і TArrayIterator, оскільки кожен похідний клас є конкретним окремим випадком базового ітератора.
Також клас TBasicIterator є дружнім для класу TList, так як він повинен мати доступ до елементів контейнера. Тут буде застосовуватися агрегація з класом TList, оскільки обидва класу самостійні, але TBasicIterator містить поле типу TList.
Між класами TList і TListException використовується відносини використання: клас TList використовує клас TListException для роботи з винятковими ситуаціями.
На малюнку 1 наведена діаграма класів.
Рисунок 1 - Діаграма класів
Глава 2. Реалізація
Для вирішення поставленого завдання я використовував мову програмування C ++. Програма розроблена в середовищі Microsoft Visual Studio 2012, консольний додаток Win32. Операційна система Windows 7.
Програма являє собою сукупність об'єктних модулів, заголовних файлів і файлів з іхсодним кодом самої програми.
Кожен клас складається з двох файлів: інтерфейсної частини - «ClassName.h» і реалізаційною - «ClassName.cpp».
2.1 Реалізація класу TList
template lt; typename T gt; TList
{TListBasicIterator lt; T gt ;;: lt; T gt; * first; lt; T gt; * cur; lt; T gt; amp; CreateFirst (T val) ;: operator=(const TList lt; T gt; amp;); (const TList lt; T gt; amp;); isEmpty (); isEnd (); amp; Rewind (); amp; Set (T val); Get (); amp; Next (); amp; InsertAfterCurrent (T val); amp; AddLast (T val); amp; DeleteCurrent (); (void);
~ TList (void); ostream amp; operator lt; lt; (ostream amp; os, TList lt; T gt; amp; li)
{(li.isEmpty ())
{ lt; lt; Empty raquo ;; os;
}. Rewind (); (! li.isEnd ())
{ lt; lt; li.Get () lt; lt; raquo ;;. Next ();
}. Rewind (); os;
}
};
2.2 Реалізація класу TBasicIterator
class TListBasicIterator
{: void nothing ()=0;: lt; T gt; * basic_cur, * basic_first;: (); (const TList lt; T gt; amp; l);
~ TListBasicIterator (void);
};
2.3 Реалізація класу TArrayIterator
template lt; typename T gt; TArrayIterator: TListBasicIterator lt; T gt;
{: void nothing () {}; :( void);
~ TArrayIterator (void); (const TList lt; T gt; amp; l); Count (); ...