Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 124; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.91.173 (0.005 с.) |