我正在尝试从C ++中的java中学习一些面向对象的编程方面。但是我在使用dynamic_cast
时遇到了一些困难,我会在Java中使用instanceof
。
我有一个基类Cell
和一个派生(抽象)类Obstacle
。我已将其定义如下:Obstacle : public Cell
和Obstacle
包含纯虚拟析构函数。现在在Cell
类中,我想实现一个方法bool Cell::isAccesible()
。我已经按照以下方式实施了这个:
bool Cell::isAccessible() {
Obstacle *obs = dynamic_cast<Obstacle*>(this);
if (obs != NULL) return false;
return true;
}
但是我收到以下错误:
&#34;运行时dynamic_cast的操作数必须具有多态类 类型&#34;
我想要实现这个的方式有什么问题?任何指导都表示赞赏。
答案 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
类没有虚方法,因此它不显示多态行为。