2016-02-14 81 views
0

的其他孩子,我有一個指針的對象從父列表的最佳方式轉換成同一母公司

vector<Parent*> list; 

那麼我父母的2個類:Child1和CHILD2添加到列表中。

該代碼遍歷列表的所有實體並調用Execute();

for(int i = 0; i < list.size(); i++) 
    list[i]->Execute(); 

Execute()是Parent的一個虛函數,並且在每個子類中以不同的方式實現。我希望在Child1 :: Execute()的函數內部創建一個條件,其中它被列表中的相同位置處的實體Child2取代。

當然我不能這樣做:

void Child1::Execute() { 
    ... 
    if(condition) 
     this = new Child2(); 
}  

,但我不能想出一個好的解決方案,做到這一點。最後會有幾百個來自Parent的Other Child類,它們會做相同的事情,但在其他情況下,所以我想要一個好的可擴展解決方案。

感謝

+0

難道你也許發佈您的代碼的全樣本..即使它不編譯。你很難準確理解你在問什麼。你還可能談論派生類而不是子類? – silvergasp

+0

感謝您的回覆。從我的理解和根據[這個wikibook](https://en.wikibooks.org/wiki/C%2B%2B_Programming/Classes/Inheritance),一個孩子班**是一個從另一個班派生出來的班級。 – gunarthon

回答

0

一般來說,你不能用另一個對象替換當前對象。您必須將此操作移至Execute之外。

爲指針的向量:

Parent* Child1::Execute() { 
    ... 
    return condition ? new Child2 : this; 
} 

newobj = list[i]->Execute(); 
if (newobj != list[i]) { 
    delete list[i]; 
    list[i] = newobj; 
} 

對於適合智能指針的載體是多一點簡潔:

list[i] = list[i]->Execute(); 
+0

這正是我正在尋找!謝謝! – gunarthon