我有Java背景,正在尝试了解C++中的多态性。具体来说,如何调用其父类定义的std vector 中的一系列子类,以调用特定方法。我想做的是让子类重写将被调用的父类(super class)方法。但是,我不确定如何在C++中做到这一点。

这是一些有助于提高速度的代码:

    class Tile {
    public:
            virtual void drawTile();
    }

    void Tile::drawTile() {} // not sure if this is needed?

    class Tile_Grass : public Tile {
    public:
            void drawTile();
    }

    void Tile_Grass::drawTile() { ... do stuff  ... }

我想做的是:
    using namespace std;
    for (vector<Tile>::iterator itr = tileVector.begin(); itr != tileVector.end(); ++itr) {
            itr->drawTile(); // draws Tile_Grass, or any other sub class of Tile, but NOT Tile
    }

现在,for循环仅调用“Tile::drawTile()”,但我希望它调用“Tile_Grass::drawTile()”或“tileVector” vector 中Tile的另一个子类。我做错了什么或想念什么?提前致谢!

最佳答案

您需要一个Tile*的 vector ,或者更好的是std::unique_ptr<Tile>

09-30 18:07