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