我想了解dynamic_cast的工作原理。我有一个类interfaceElement和一个从它派生的类菜单。在我的程序中,我没有创建类interfaceElement的对象。执行以下代码(使用dynamic_cast执行行更准确)时,抛出bad_cast异常
void drawInterfaceElement(interfaceElement elem, int colour1, int colour2)
{
if (elem.getType()=="MENU")
{
menu &cur = dynamic_cast<menu&>(elem);
this->drawMenu(&cur,colour1,colour2);
}
}
为什么?
答案 0 :(得分:2)
以interfaceElement
为参考。目前,您通过按值获取切片,导致menu
子对象丢失。 dynamic_cast
无法转换为该类型,导致std::bad_cast
被抛出(如果您转换为指针,则会返回空指针)。
答案 1 :(得分:2)
问题是您按值传递elem
。所以它是一个interfaceElement
对象,不能归结为派生类型。
您需要通过引用传递:
void drawInterfaceElement(interfaceElement& elem, int colour1, int colour2)
^