我有一个名为 Action
的类和一个派生自 Action
的 MoveAction
并且我有一个包含变量的对象: Action action_to_perform
。现在我为这个变量分配了一个新的 MoveAction。这些 Action 类包含一个方法 perform()
。 MoveAction
执行Action
的执行以外的操作。当我打电话时
object->action_to_perform
然后它调用 Action 的 perform 方法,当它被设置为一个 MoveAction 对象时。如何自动将其转换为 MoveAction?
编辑:
Action .h:
class Action
{
public:
Action();
virtual ~Action();
virtual void perform();
protected:
private:
};
移动操作.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);
最佳答案
您遇到了 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();
关于c++ - 使用派生类自动转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25390902/