【发布时间】:2011-04-19 15:24:47
【问题描述】:
我一直认为必须使用指针来实现多态性。使用规范示例:
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
如果可行,这两种情况有什么区别吗?我试图在 Stroustrup 中查找信息,但一无所获。
我重新打开它是因为我想进一步探索。
所以至少有一个区别是dynamic_cast。对我来说,多态性包括使用 dynamic_cast。
我可以去吗
Rhomboid & r = dynamic_cast<Rhomboid &>(shape);
如果转换失败会发生什么?这有什么不同吗?
Rhomboid * r = dynamic_cast<Rhomboid*>(&shape);
【问题讨论】:
标签: c++ reference polymorphism