如何调用父类类型列表的子类的方法? C ++

时间:2013-06-21 12:42:04

标签: c++ list parent-child

好的,所以我确定了情况:

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

我对另一个课程进行了这个场景:

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()时,我想从子类调用on,但是他总是从父类调用,因为它是一个列表。我需要这个,因为我有其他类是classA的孩子,并且会以不同的方式做'方法'。

1 个答案:

答案 0 :(得分:1)

您需要使用指向该项的指针才能使其具有多态性。您目前处于object slicing的危险之中,因为对象可以通过复制构造函数放置在列表中。

除了您描述的行为方法(polymorphism)之外,您还需要将方法声明为virtual。 (我假设缺少返回类型是一个错字?)。

更改为std::list<ClassA*>(或更好的智能指针)。