我有一个名为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);
答案 0 :(得分:3)
您遇到了object slicing的问题。
您需要存储指向Action
的指针。
Action* action_to_perform = NULL;
...
action_to_perform = new MoveAction(0, 1);
action_to_perform->perform();
应该有用。
为简化内存管理,最好存储智能指针,例如shared_ptr
或unique_ptr
。
std::unique_ptr<Action> action_to_perform;
...
action_to_perform.reset(new MoveAction(0, 1));
action_to_perform->perform();