2013-06-21 32 views
0

行,所以我已經將情況設置:如何調用父類類型列表的子類的方法? C++

ClassA() 
{ 
    method(); 
} 
ClassB: public ClassA() 
{ 
    overrides method(); 
} 

的我有這個situtation回事另一個類:

list<ClassA> members; 
addMethod(ClassA newMember) 
{ 
    members.push_back(newMember); 
} 

update() 
{ 
    for(std::list<ClassA>::iterator list_iter = members.begin(); list_iter != members.end(); list_iter++) 
    { 
     ClassA tklb = *list_iter; 
     tklb.method(); 
    } 

    return 0; 
} 

的事情是,當我在做tklb.method()我想從子類調用,但他總是從父類調用,因爲它是一個列表。我需要這個,因爲我有其他類是classA的子類,並且會以不同方式執行'method'。

回答

1

您需要使用指向該項目的指針來表現多態。您目前有object slicing的危險,因爲可以通過複製構造函數將對象放入列表中。

此外,按照您描述的方法行事(polymorphism),您需要聲明該方法爲virtual。 (我認爲缺乏返回類型是一個錯字?)。

更改爲std::list<ClassA*>(或更好的是一個合適的智能指針)。

+2

你也可以指出'方法'需要'虛擬'(並且有一個返回類型) – GuyRT

相關問題