0

好的,所以我设置了情况:

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 但他总是从父类调用,因为它是一个 list 。我需要这个,因为我有其他类是 classA 的子类,并且会以不同的方式执行“方法”。

4

1 回答 1

1

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

此外,要使方法按照您描述的方式运行(多态性),您需要将该方法声明为virtual. (我认为缺少返回类型是一个错字?)。

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

于 2013-06-21T12:43:10.067 回答