Я всегда думаю, что нужно использовать указатели для полиморфизма. Используя канонический пример:
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);