来自父引用的C ++调用子方法

时间:2012-03-29 04:46:53

标签: c++ polymorphism override

我有一个

    std::list<TYPE> 

可能包含TYPE的子类。我需要迭代列表并调用TYPE中定义的函数的子项重写版本,但我不知道TYPE的哪个子类,引用的类型为TYPE。

如果我使用TYPE引用调用它将调用TYPE的虚方法而不是我的子类方法。有没有办法说“调用最远的子类'这个方法的重写版本?”

2 个答案:

答案 0 :(得分:2)

您无法在std::list中存储引用,并且您的列表中不包含TYPE子类的实例。

如果将TYPE的子类的实例分配给TYPE,它将被“切片”,这意味着所有子类信息都将丢失。这就是调用TYPE方法的原因 - 对象 TYPE,而不是TYPE的子类。

如果你想要多态,你必须在列表中存储指针 - TYPE*或智能指针。

答案 1 :(得分:0)

不,因为可能存在从基类继承的各种子类,并且您不确定要调用哪种方法。但是,您可以使用static_cast将基类引用转换为子类引用。