Программирование на С++. Рейзлин В.И. - 25 стр.

UptoLike

Составители: 

27
Иерархия объектов
Иерархия классов есть иерархия по принципу наследования, т.е.
типа это есть разновидность того”. Например, рабочий есть разновид-
ность персоны”, автомобиль” есть разновидность “транспортного сред-
ства”. В отличие от этого иерархия объектов это иерархия по
принципу вхождения, т.е. типа это есть часть того. Например, ус-
тановка часть завода”, двигатель часть “автомобиля”. Таким об-
разом, объекты нижнего уровня иерархии включаются в объекты
более высокого уровня, которые являются для них группой.
Итератор
Итераторы позволяют выполнять некоторые действия для каждого
элемента определенного набора данных.
For all элементов набора { действия}
Такой цикл мог бы быть выполнен для всего набора, например, что-
бы напечатать все элементы набора, или мог бы искать некоторый элемент,
который удовлетворяет определенному условию, и в этом случае такой
цикл может закончиться, как только будет найден требуемый элемент.
Мы будем рассматривать итераторы как специальные методы класса-
группы, позволяющие выполнять некоторые действия для всех объектов,
включенных в группу. Примером итератора является метод Show.
Нам бы хотелось иметь такой итератор, который позволял бы вы-
полнять над всеми элементами группы действия, заданные не одним из ме-
тодов объекта, а произвольной функцией пользователя. Такой итератор
можно реализовать, если эту функцию передавать ему через указатель на
функцию.
Определим тип указателя на функцию следующим образом:
typedef void(*PF)(TObject*,< дополнительные параметры>);
Функция имеет обязательный параметр типа TObject или TObject*,
через который ей передается объект, для которого необходимо выполнить
определенные действия.
Метод-итератор объявляется следующим образом:
void TGroup::ForEach(PF action,< дополнительные параметры >);
где
action единственный обязательный параметр-указатель на функ-
цию, которая вызывается для каждого элемента группы;
дополнительные параметры передаваемые вызываемой функции
параметры.
Затем определяется указатель на функцию и инициализируется пере-
даваемой итератору функцией.
PF pf=myfunc;