C ++ - 从方法基类调用派生类中的重写方法

时间:2015-11-18 23:07:32

标签: c++ polymorphism

f1成为类c的虚拟非抽象方法,f2是类c的方法。
也让{ {1}}是基类c_derived中的派生类。
假设c中的f1被覆盖。如何从c_derived中的方法f1调用c_derived的方法f2(被覆盖)?
可能的解决方法。将函数指针参数添加到c参数列表,创建c::f2的包装c_derived::w,并传递函数来自包装器c::f2的{​​{1}}到c_derived::f1的指针。
相反,是否有合理的方法来执行此操作?

2 个答案:

答案 0 :(得分:3)

这很棘手,但可以通过一些黑客来完成:

void c::f2()
{
    f1();   // if f1 is overriden in a class deriving from c, 
            // the derived class version is called
}

要调用基类版本(c::f1),您需要完全限定通话 - c::fi()

答案 1 :(得分:2)

尽管Luchian Grigore给出了很好的答案,但我想指出这个想法是template method pattern背后的想法。

该模式允许派生类决定如何完成算法实现,或者通过虚拟方法的形式提供默认解决方案,或者通过使用纯虚方法提供解决方案。

在上述两种情况中,f2成员调用f1成员的正确实现,如下所示:

f1();

知道解决方案的名称通常是有用的。