pm1*_*100 41 c++ polymorphism reference
我一直认为必须使用指针进行多态性.使用规范示例:
DrawEngine::render(Shape *shape)
{
shape->draw();
shape->visible(true);
}
Run Code Online (Sandbox Code Playgroud)
并将指针传递给各种Shape派生类.它与引用一样吗?
DrawEngine::render(Shape &shape)
{
shape.draw();
shape.visible(true);
}
Run Code Online (Sandbox Code Playgroud)
甚至有效:
engine.render(myTriangle); // myTriangle instance of class derived from Shape
Run Code Online (Sandbox Code Playgroud)
如果这样可行,这两种情况之间是否存在差异?我试图在Stroustrup中找到信息,但我一无所获.
我重新打开了这个,因为我想再探索一下.
所以至少有一个区别是dynamic_cast.对我来说,多态性包括使用dynamic_cast.
我可以去吗
Rhomboid & r = dynamic_cast<Rhomboid &>(shape);
Run Code Online (Sandbox Code Playgroud)
如果演员表失败会怎么样?这有什么不同吗?
Rhomboid * r = dynamic_cast<Rhomboid*>(&shape);
Run Code Online (Sandbox Code Playgroud)
Ale*_*nov 46
关于多态性,引用就像指针一样工作.
Che*_*Alf 10
关于dynamic_cast
,失败的强制转换会产生带指针的空指针,并导致抛出bad_cast
带引用的(IIRC)异常.
一个原因是没有有效的空引用这样的东西.
可能另一个原因(但它可能只是一个无意中有用的紧急功能)是有时需要异常,有时需要易于检查的nullpointer,无论你有一个引用或指针,它需要在大多数是解除引用或地址操作符以获取所需的行为.
干杯&hth.,