如何调用父类类型列表的子类的方法?C++
How to call a method of a child class of a father class type list? C++
好的,所以我已经设置好了情况:
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*>
(或者更好的是适当的智能指针)。
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- C++将静态多态类自添加到子类的 constexpr 列表中
- 子类对象列表重新解释为基类对象列表?(C++11).
- SWIG C++ to Python:生成 Python 列表的子类
- C++:从两个包含子类 (typedef) 的列表创建一个列表
- 如何创建一个包含C 中的子类的类的链接列表
- 子类列表"master copies",寻找更好的设计
- 将子类列表转换为超类列表
- 从基类模板化列表中实例化子类对象
- C++传递包含子类元素的类列表
- 迭代子类列表错误
- 对 MFC 文档视图的列表视图进行子类化
- C++ 编译类的子类的时列表
- 如何调用父类类型列表的子类的方法?C++
- 为自定义对象列表使用哪个模型子类/视图
- 排序STL列表的子类
- 保留子类的中心列表,但避免静态实例
- C++不同子类的链接列表