好的,所以我确定了情况:
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的孩子,并且会以不同的方式做'方法'。
答案 0 :(得分:1)
您需要使用指向该项的指针才能使其具有多态性。您目前处于object slicing的危险之中,因为对象可以通过复制构造函数放置在列表中。
除了您描述的行为方法(polymorphism)之外,您还需要将方法声明为virtual
。 (我假设缺少返回类型是一个错字?)。
更改为std::list<ClassA*>
(或更好的智能指针)。