Я всегда думаю о необходимости использовать указатели для полиморфизма.Используя канонический пример:
DrawEngine::render(Shape *shape)
{
shape->draw();
shape->visible(true);
}
И передавая указатель на различные производные от Shape классы.Работает ли это так же со ссылками?
DrawEngine::render(Shape &shape)
{
shape.draw();
shape.visible(true);
}
Можно ли вообще сделать следующее:
engine.render(myTriangle); // myTriangle instance of class derived from Shape
Если это работает, есть ли различия между этими двумя случаями?Я пытался найти информацию в Страуструпе, но ничего не нашел.
Я снова открыл это, потому что хотел изучить чуть больше.
Так что по крайней мере одно отличие - dynamic_cast.Для меня полиморфизм включает использование dynamic_cast.
Могу ли я пойти
Rhomboid & r = dynamic_cast<Rhomboid &>(shape);
Что произойдет, если приведение не удастся?Это что-то другое?
Rhomboid * r = dynamic_cast<Rhomboid*>(&shape);