Итератор.
Итераторлар белгілі мәліметтердің әрбір элементінің кейбір әдістерін орындауға рұқсат етеді.
For all терім элементтері {әрекет}
Мұндай цикл барлық терім үшін орындала алар еді, мысалы, терімнің барлық элементтерін басып шығару үшін немесе негізгі шартты қанағаттандыратын кейбір элементті іздейтін және бұл жағдайда мұндай цикл ізделінді элемент табылған кезде аяқталады.
Біз итераторларды топқа қосылған, барлық объектілерге арналған кейбір әдістерді орындауға мүмкіндік беретін класс топтарының негізгі әдісі ретінде қарастырамыз. Итераторлар мысалына Show әдісі келеді.
Біз топтың барлық элементтерінің әрекеттерін, объектінің біреуімен ғана емес, пайдаланушының өз бетімен берген функциясымен орындауға рұқсат ететін итератордың болуын қалаймыз. Егер бұл функцияны оған функция көрсеткіші арқылы жіберсек, мұндай итераторды іске асыруға болады
Функцияға көрсеткіш типін келесі түрде анықтайық:
typedef void(*PF)(TObject*,< қосымша параметрлер>);
Функцияда TObject немесе TObject* типті міндетті параметр болады. Осы параметрлер арқылы қажетті айқын әрекеттерді орындау үшін оған объект беріледі.
Итератор-әдіс келесі түрде жазылады:
void TGroup::ForEach(PF action,< қосымша параметрлер >);
мұндағы
action функцияға топтың әрбір элементі үшін шақырылатын жалғыз міндетті параметрлі көрсеткіш;
қосымша параметрлер жіберілген шақырылушы функцияның параметрлері.
Содан соң функция көрсеткіші анықталады және функция итераторына тапсырылған инициализацияланады.
PF pf=myfunc;
Сол уақытта итератор шақырылады, мысалы, қосымша параметріне арналған int типі үшін мынадай:
gr.ForEach(pf,25);
мұндағы gr топ-объект.
Достарыңызбен бөлісу: |