c ++ - 使用派生类自动转换

时间:2014-08-19 18:52:23

标签: c++ class oop

我有一个名为Action的类,以及一个MoveAction,它派生自Action,我有一个包含变量的对象:Action action_to_perform。现在我为这个变量分配了一个新的MoveAction。这些Action类包含方法perform()MoveAction除了Action之外还执行其他操作。当我打电话

object->action_to_perform

然后当它设置为MoveAction对象时,它调用Action的perform方法。如何自动将其转换为MoveAction?

编辑:

Action.h:

class Action
{
public:
    Action();
    virtual ~Action();

    virtual void perform();
protected:
private:
};

MoveAction.h:

class MoveAction : public Action
{
public:
    MoveAction(int, int);
    virtual ~MoveAction();

    int dx, dy;

    virtual void perform();
protected:
private:
};

在Player.cpp中:

Action action_to_perform;
...
action_to_perform = MoveAction(0, 1);

1 个答案:

答案 0 :(得分:3)

您遇到了object slicing的问题。

您需要存储指向Action的指针。

Action* action_to_perform = NULL;
...
action_to_perform = new MoveAction(0, 1);
action_to_perform->perform();

应该有用。

为简化内存管理,最好存储智能指针,例如shared_ptrunique_ptr

std::unique_ptr<Action> action_to_perform;
...
action_to_perform.reset(new MoveAction(0, 1));
action_to_perform->perform();