我总是认为在多态方面必须使用指针。以经典的例子为例:
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);
dynamic_cast
在进行错误的类型转换时会抛出异常而不是返回空指针。 - GManNickGdynamic_cast
的例子是指针和引用之间的基本区别:指针可以合法地为NULL,而引用则不行。我理解这个问题的核心在于引用在虚表方面的行为是否与指针相同。因此给出了简要回答。 - Alex Emelianov