C++ 如何调用父类类型列表的子类的方法?C++;
好的,我已经准备好了情况:C++ 如何调用父类类型列表的子类的方法?C++;,c++,list,parent-child,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>
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;
}
列出成员;
addMethod(ClassA新成员)
{
成员。推回(新成员);
}
更新()
{
for(std::list::iterator list_iter=members.begin();list_iter!=members.end();list_iter++)
{
ClassA tklb=*列表;
tklb.method();
}
返回0;
}
问题是,当我执行tklb.method()时,我想从子类调用on,但他总是从父类调用,因为它是一个列表。我需要这个,因为我有其他类是classA的子类,它们的“方法”会有所不同。您需要使用指向该项的指针,使其具有多态性。您目前正处于危险之中,因为可以通过复制构造函数将对象放置在列表中 除此之外,要使一个方法按照您所描述的()进行操作,您还需要将该方法声明为
virtual
。(我假设缺少返回类型是一个输入错误?)
更改为
std::list
(最好是一个合适的智能指针)。您还可以指出方法必须是虚拟的(并且具有返回类型)