动态向下转换为抽象类(C ++)

时间:2014-04-15 16:31:56

标签: c++ casting polymorphism

我正在尝试从C ++中的java中学习一些面向对象的编程方面。但是我在使用dynamic_cast时遇到了一些困难,我会在Java中使用instanceof

我有一个基类Cell和一个派生(抽象)类Obstacle。我已将其定义如下:Obstacle : public CellObstacle包含纯虚拟析构函数。现在在Cell类中,我想实现一个方法bool Cell::isAccesible()。我已经按照以下方式实施了这个:

bool Cell::isAccessible() {

    Obstacle *obs = dynamic_cast<Obstacle*>(this);

    if (obs != NULL) return false;
    return true;
}

但是我收到以下错误:

  

&#34;运行时dynamic_cast的操作数必须具有多态类   类型&#34;

我想要实现这个的方式有什么问题?任何指导都表示赞赏。

2 个答案:

答案 0 :(得分:5)

Cell类必须至少有一个虚函数才能使用dynamic_cast。此外,如果Cell是您的基类,它应该有一个虚拟析构函数。

你应该使isAccessible成为虚拟函数并在Obstacle中覆盖它以返回false。

答案 1 :(得分:3)

你做的是错的。通常,您不需要在其基类中强制转换为类的子类型。如果需要,可能是设计错误。在您的情况下,代码应如下所示。

virtual bool Cell:: isAccessible()
{
  return true;
}

bool Obstacle::isAccessible()
{
  return false;
}

P.S。您的错误的原因是Cell类没有虚方法,因此它不显示多态行为。