Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Иерархия объектов и группа. итераторыСодержание книги
Поиск на нашем сайте Цель. Получить практические навыки создания объектов-групп и использования методов-итераторов. Основные теоретические сведения. Группа. Группа - это объект, в который включены другие объекты. Объекты, входящие в группу, называются элементами группы. Элементы группы, в свою очередь, могут быть группой. Примеры групп: 1. Окно в интерактивной программе, которое владеет такими элементами, как поля ввода и редактирования данных, кнопки, списки выбора, диалоговые окна и т.д. 2. Агрегат, состоящий из более мелких узлов. 3. Огород, состоящий из растений, системы полива и плана выращивания. 4. Некая организационная структура (например, ФАКУЛЬТЕТ, КАФЕДРА, СТУДЕНЧЕСКАЯ ГРУППА). Мы отличаем “группу” от “контейнера”. Контейнер используется для хранения других данных. Примеры контейнеров: объекты контейнерных классов библиотеки STL в C++ (массивы, списки, очереди). В отличие от контейнера мы понимаем группу как класс, который не только хранит объекты других классов, но и обладает собственными свойствами, не вытекающими из свойств его элементов. Группа дает второй вид иерархии (первый вид - иерархия классов, построенная на основе наследования) - иерархию объектов (иерархию типа целое/часть), построенную на основе агрегации. Реализовать группу можно несколькими способами: 1. Класс “группа” содержит поля данных объектного типа. Таким образом, объект “группа” в качестве данных содержит либо непосредственно свои элементы, либо указатели на них class TWindowDialog: public TGroup { protected: TInputLine input1; TEdit edit1; TButton button1; /*другие члены класса*/ }; Такой способ реализации группы используется в C++ Builder.
2. Группа содержит член-данное last типа TObject*, который указывает на начало связанного списка объектов, включенных в группу. В этом случае объекты должны иметь поле next типа TObject*, указывающее на следующий элемент в списке. 3. Создается связанный список структур типа TItem: struct TItem {TObject* item; TItem* next;}; Поле item указывает на объект, включенный в группу. Группа содержит поле last типа TItem *, которое указывает на началосвязанного списка структур типа TItem. Если необходим доступ элементов группы к ее полям и методам, объект типа TObject должен иметь поле owner типа TGroup*, которое указывает на собственника этого элемента. Методы группы. Имеется два метода, которые необходимы для функционированиягруппы: 1) void Insert(TObject* p); Вставляет элемент в группу. 2) void Show(); Позволяет просмотреть группу. Кроме этого группа может содержать следующие методы: 1) int Empty(); Показывает, есть ли хотя бы один элемент в группе. 2) TObject* Delete(TObject* p); Удаляет элемент из группы, но сохраняет его в памяти. 3) void DelDisp(TObject* p); Удаляет элемент из группы и из памяти.
Иерархия объектов. Иерархия классов есть иерархия по принципу наследования, т.е. типа “это есть разновидность того”. Например, “рабочий есть разновидность персоны”, “автомобиль” есть разновидность “транспортного средства”. В отличие от этого иерархия объектов - это иерархия по принципу вхождения, т.е. типа “это есть часть того”. Например, “установка - часть завода”, “двигатель” - часть “автомобиля”. Таким образом, объекты нижнего уровня иерархии включаются в объекты более высокого уровня, которые являются для них группой.
Итератор. Итераторы позволяют выполнять некоторые действия для каждого элемента определенного набора данных. Fo r all элементов набора { действия} Такой цикл мог бы быть выполнен для всего набора, например, чтобы напечатать все элементы набора, или мог бы искать некоторый элемент, который удовлетворяет определенному условию, и в этом случае такой цикл может закончиться, как только будет найден требуемый элемент. Мы будем рассматривать итераторы как специальные методы класса-группы, позволяющие выполнять некоторые действия для всех объектов, включенных в группу. Примером итератора является метод Show. Нам бы хотелось иметь такой итератор, который позволял бы выполнять над всеми элементами группы действия, заданные не одним из методов объекта, а произвольной функцией пользователя. Такой итератор можно реализовать, если эту функцию передавать ему через указатель на функцию. Определим тип указателя на функцию следующим образом: typedef void(*PF)(TObject*,< дополнительные параметры>); Функция имеет обязательный параметр типа TObject или TObject *, через который ей передается объект, для которого необходимо выполнить определенные действия. Метод-итератор объявляется следующим образом: void TGroup:: ForEach(PF action,< дополнительные параметры >); где action - единственный обязательный параметр-указатель на функцию, которая вызывается для каждого элемента группы; дополнительные параметры - передаваемые вызываемой функции параметры. Затем определяется указатель на функцию и инициализируется передаваемой итератору функцией. PF pf= myfunc;
Тогда итератор будет вызываться, например, для дополнительного параметра типа int, так: gr. ForEach(pf,25); Здесь gr - объект-группа.
|
||
|
Последнее изменение этой страницы: 2021-11-27; просмотров: 199; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.009 с.) |