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

标签 c++ class oop

我有一个名为 Action 的类和一个派生自 ActionMoveAction 并且我有一个包含变量的对象: 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_ptrunique_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/

相关文章:

c# - OOP - 如何在类构造函数之前调用函数

php - 从静态函数获取子类名 php

c++ - 为什么我的本地对象被破坏了两次?

c++ - 有没有办法在运行时设置 argv 和 argc 参数?

c++ - CPP中的getline和cin

javascript - 在动态宽度侧边栏中将元素保持在同一行

c++ - 理解函数错误的模糊新声明

c++ - 在我的 C++ 游戏中出现 "undefined reference to class::function"错误。

java - 事件处理程序类

Java - 修改对象的内部数据,或使用修改后的数据创建新对象