使用派生类自动强制转换
automatic casting with derived class
我有一个叫做Action
的类,和一个来自Action
的MoveAction
,我有一个包含变量的对象: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);
您遇到对象切片问题。
需要存储一个指向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();
相关文章:
- 存储模板类型以强制转换回派生<T>
- 在 C++ 中将对象转换为派生类型
- 从基类实例调用派生类方法而不进行强制转换
- 从基指针到派生的强制转换问题
- C++将派生类转换为基类时'object slicing'期间发生的情况
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- C ++基础私有方法在将自身转换为派生类后可以访问吗?
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 为什么从基转换为派生提供此功能?
- 将基本实例指针强制转换为派生实例指针是否合法?(实例不是派生实例)
- 从从该抽象类派生的 Python 对象强制转换C++抽象类C++
- 基类到派生类的强制转换向量
- 有没有办法复制派生类指针的向量而不将其强制转换为基类?
- 为什么此代码不将基类强制转换为 c++ 中的派生类?
- 如何在运行时将指向派生类的 void* 正确转换为指向基类的 void*
- C++转换派生类
- CRTP / 宏 / 避免强制转换派生类的指针
- 如何正确转换派生类