Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何调用父类类型列表的子类的方法?C++;_C++_List_Parent Child - Fatal编程技术网

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
(最好是一个合适的智能指针)。

您还可以指出
方法必须是
虚拟的(并且具有返回类型)