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

How to call a method of a child class of a father class type list? C++

本文关键字:列表 子类 方法 C++ 类型 父类 何调用 调用      更新时间:2023-10-16

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

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的子类,并且会以不同的方式执行"方法"。

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

为了使方法的行为与您描述的一样(多态性),您还需要将该方法声明为virtual。(我认为缺少返回类型是打字错误?)。

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