![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
В вашем случае один Вызов виртуальной функции плюс свитч, что ставит скорости на один уровень.
Речь идет не о типе полиморфизма, динамическом или статическом, а о способе использования. Классический - линейный - выбор реализации функции зависит от типа объекта Двойная диспатчеризация - матричный - выбор основывается на типах двух объектов. Это применимо как к статическому полиморфизму, так и и к динамическому. Динамический же мы используем в нашем задании потому, что нам требуется хранить все наши типы в одном контейнере, и использовать элементы, зная базовый интерфейс. ООП отличается от процедурного не тем, что в первом используются классы, а тем логика выполнения задания объектом локализована. Приведенные функции в примере являются вспомогательными. И не "покушаются" внутренних особеностей объекта. Это сообщение отредактировал(а) mes - 11.11.2008, 16:10 |
||||
|
|||||
Torsten |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 10.6.2008 Где: Pskov Репутация: 3 Всего: 7 |
Тока конечно еще лучше, как предложили юзать boost::ptr_list, т.к. он более удобен для работы с указателями и сам удаляем обьекты. --------------------
We have no begining, we have no end. We are infinite. |
|||
|
||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а кто-то говорил , что надо запихивать все в один класс ? кесарю - кесарево ![]()
честно сказать мысль тут понял не до конца. Если речь о том что визитор должен реализовывать всю конкретную реализацию для каждого "посещаемого типа"объекта, то это не совершено не так. Визитор всего лишь switch. И нужен для того, 1. чтоб не было такого :
2. чтоб при изменении иерархии, компилятор бы визжал бы, а не позволял бы скомпилировать неправильный код, из за того что программист не удержал в памяти все места сравнения. 3. чтоб вызовы были определены и проверены на стадии компиляции, a не оставлялась возможность ошибки рантайма : ![]() Это сообщение отредактировал(а) mes - 11.11.2008, 16:09 |
||||||
|
|||||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
складывается впечатление, что Lycifer слышит звон, да не знает где он
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |