(6 часов)
Вопросы для самостоятельной подготовки
1. Передача объекта в качестве параметра функции (метода) по значению и по ссылке: вызов конструктора копирования.
2. Возвращение объекта в качестве результата функции (метода): вызов конструктора, деструктора и оператора присваивания.
3. Указатель на возвращаемое значение функции (метода).
4. Перегрузка операций (присваивания, индексирования)
5. Шаблонные классы
6. Обработка исключительных ситуаций.
5.2. Требования к реализации связного списка
целочисленных значений
Для реализации связного списка необходимо объявить класс List, инкапсулирующий закрытое объявление класса ListElement, представляющего элемент списка, а также закрытые поля _first и _last, хранящие указатели на первый и последний элемент списка. Закрытое объявление класса ListElement гарантирует, что доступ к элементам списка будет открыт исключительно внутри класса List.
Класс ListElement, в свою очередь, должен содержать открытые поля: _value, _next и _prev, хранящие целочисленное значение элемента списка, указатель на последующий элемент списка и указатель на предшествующий элемент списка соответственно.
В классе List необходимо реализовать конструктор по умолчанию, конструктор копирования, деструктор, а также перегрузить оператор присваивания. При реализации конструктора копирования и оператора присваивания необходимо создавать копию списка-параметра, чтобы избежать ситуаций потерянных и висячих ссылок.
Кроме того, класс List должен содержать следующие методы:
· добавление нового элемента в конец списка;
· удаление последнего элемента списка;
· вставка нового элемента в список по заданному индексу;
· удаление из списка элемента с заданным индексом;
· возвращение значения элемента списка с заданным индексом;
· обеспечение доступа к значению элемента списка по индексу для чтения и записи (перегрузка оператора [] - «квадратные скобки»);
· возвращение количества элементов списка.
Требования к реализации шаблонного связного списка
Основные операции, которые можно выполнить со списком, не зависят от того, элементы какого типа он в себе содержит. Другими словами при реализации данных операций не происходит специфической обработки метода данных элементов. Поэтому чтобы иметь возможность использовать один и тот же класс связного списка с элементами различных типов без необходимости программировать заново новую версию класса, можно использовать механизм шаблонов.
При работе со связным списком могут возникнуть аварийные ситуации, вызванные попыткой обращения к его элементам по некорректному индексу, выходящему за его границы. Для обработки аварийных ситуаций необходимо использовать механизм исключений.
Требования к реализации логики предметной области
Необходимо модифицировать код программы, реализованной в рамках лабораторной работы №2: вместо динамических массивов для представления списков объектов предметной области необходимо использовать реализованный шаблонный класс связного списка. Принцип инкапсуляции позволяет локализовать при этом возможные ошибки в методах разработанных классов, что упрощает модификацию кода.
Требования к оформлению и защите лабораторной работы
К защите необходимо предъявить три проекта:
1.Проект, демонстрирующий работу с разработанным связным списком целочисленных значений. При защите лабораторной работы необходимо продемонстрировать в режиме отладки вызовы:
a. конструктора копирования (например, в момент передачи списка в метод или функцию в качестве параметра по значению, а также в момент возвращения списка в качестве результата метода или функции),
b. деструктора (например, в момент уничтожения локального списка при завершении работы метода или функции),
c. оператора присваивания.
2.Проект, демонстрирующий работу с разработанным шаблонным связным списком. Необходимо создать экземпляры связного списка, содержащие целочисленные и вещественные значения, а также продемонстрировать обработку исключительных ситуаций.
3.Проект, реализующий логику задачи с использованием разработанного шаблонного связного списка.