我试图学习一些我从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;
}

但是我得到以下错误:



我要实现此方法的方式出了什么问题?任何指导表示赞赏。

最佳答案

单元类必须至少具有一个虚拟函数才能使用dynamic_cast。同样,如果Cell是您的基类,则它应该具有虚拟析构函数。

您应该将isAccessible设为虚拟函数,并在Obstacle中覆盖它以返回false。

关于c++ - 动态向下转换为抽象类(C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23089511/

10-13 03:25