Flower* operatorOO { switch(r
Автор admin
Понедельник, 22 июня 2009 11:32
Flower* operatorOO { switch(randО % 3) { default: case 0: return new Gladiolus: case 1: return new Renuculus; case 2: return new Chrysanthemum: } } }: int mainO { srand(time(0)): // Раскрутка генератора случайных чисел vector v(10): generate(v.begin(). v.endO. FlowerGenO); vector:iterator it: // Выглядит почти так же. как если бы в класс Flower // была добавлена виртуальная функция для получения // строкового представления: StringVal sval: for(it = v.beginO: it != v.endO: it++) { (*it)->accept(sval): cout « string(sval) « endl; } // Выполнение операций “Bee” со всеми объектами Flower: Bee bee; for(it = v.beginO: it != v.endO; it++) (*it)->accept(bee); purge(v): } ///:- Класс Flower возглавляет основную иерархию, и каждый из его подтипов умеет «принимать» Посетителей (Visitor) функцией accept(). Иерархия flower() не содержит других операций, помимо accept(), поэтому вся функциональность иерархии Flower содержится в иерархии Visitor. Обратите внимание: классы Visitor должны обладать информацией о конкретных разновидностях Flower, и при добавлении нового типа Flower приходится перерабаты
Комментарии закрыты.
Последние комментарии