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

C++ - Calling overridden method in derived class from method base class

本文关键字:方法 重写 调用 基类 C++- 派生      更新时间:2023-10-16

f1为类c的虚拟非抽象方法,f2为类c的方法
还设c_derived是基类c的派生类
假设f1c_derived中被覆盖。如何从c中的f2方法调用c_derived-的方法f1(重写)
可能的解决方案c::f2参数列表中添加一个函数指针参数,创建c::f2的包装c_derived::w,并将c_derived::f1的函数指针从包装c_derived::w传递到c::f2
有没有一个合理的方法来做这件事?

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

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

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

尽管Luchian Grigore给出了很好的答案,但我想指出的是,这个想法是模板方法模式背后的想法。

该模式让派生类决定如何完成算法实现,要么以虚拟方法的形式提供默认解决方案,要么使用纯虚拟方法根本不提供解决方案。

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

f1();

了解正在应用的解决方案的名称通常会有所帮助。