我有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