2016-02-14 65 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