Прежде чем вы скажете мне, что уже есть подобный вопрос, да, я знаю, я прочитал это . Но вопрос там сосредоточен на , когда , меня интересует , почему .
Я понимаю, как все работает. Классический пример животное, собака, кошка всегда работает как шарм.
Дело в том, что этот код
int main()
{
Cat c;
Sound theSound;
c.letsDo(&theSound);
}
кажется мне таким неестественным. Почему?
То есть, да, так у меня модели Dog и Cat недифференцированные (впервые я использую это слово на английском, кстати), потому что реальная реализация скрыта под классом Sound, но не Разве это не способ утяжелить ваш код? Разве полиморфизма недостаточно, чтобы сделать что-то вроде этого?
Для меня разница в том, что с полиморфизмом вам нужно редактировать каждый класс (но модель остается той же, верно?), Тогда как вам нужно только отредактировать один класс с посетителем шаблон дизайна.