我有3个类。一个是基地,一个是父母,一个是小孩。父母在某个时间点实例化并分配数据。在某些情况下,它直接使用,但在其他情况下,需要在其子类中实现功能。C++如何使用派生对象中的独立基础对象
我想什么做的是对父对象浇铸成子对象,因此它的虚函数将与母公司的数据可用于:
class UndoBase : public QUndoCommand
{
public:
UndoBase() {}
virtual void undo() = 0;
virtual void redo() = 0;
};
class CommandParent : public UndoBase
{
public:
CommandParent() {}
virtual void undo()
virtual void redo()
protected:
someType data
};
class CommandChild : public CommandParent
{
public:
CommandChild() {}
virtual void undo() //overrides parent
virtual void redo() //overrides parent
};
我已经试过这样:
CommandParent *parent = new CommandParent;
//assign data
UndoBase *command = static_cast<CommandChild*>(parent);
command->redo();
而且它工作(使用CommandChild实现和CommandParent数据),虽然我会发誓它应该是未定义的行为(这也可以工作,我知道)。既然我怀疑这是正确的做法,我想问问这是否确定,或者除了组合之外还有其他方法。
如果您将对象创建为父对象,则永远不会成为/转换为子对象。你必须立即将它作为一个孩子,把它当作父母来对待,有时把它当作一个孩子来对待。 – 2014-11-04 11:26:30
'ommandParent * parent = new CommandParent;',此行错误后''CommandChild'的任何考虑* *。没有这样的物体存在,你不会通过挥动魔杖来神奇地创造出这样的物体。 – WhozCraig 2014-11-04 11:32:20
是的,我明白了。任何将基础对象“注入”孩子作为基础的方法? – Resurrection 2014-11-04 11:37:33