C++-从方法基类调用派生类中的重写方法
C++ - Calling overridden method in derived class from method base class
设f1
为类c
的虚拟非抽象方法,f2
为类c
的方法
还设c_derived
是基类c
的派生类
假设f1
在c_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();
了解正在应用的解决方案的名称通常会有所帮助。
相关文章:
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 方法重写线程C++中的概念
- 如何强制从重写方法调用重写的方法基方法?
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 在 C++ 中使用模板方法重写类方法
- 检查子类是否执行了方法重写
- C++方法重写和重载(编译器级别)
- 用模板方法重写虚拟方法
- 方法重写(没有虚拟方法或指针)是否被认为是多态性的一部分
- C++ - 方法重写未按预期表示
- 使用两种方法重写<<运算符
- C++阻止方法重写
- C++方法重写
- c++在具体类中强制方法重写
- 方法重载和方法重写的性能问题
- C++中的方法重写是否总是在派生类的标头中完成?
- 是否有更好的方法重写此代码片段
- 为什么静态方法重写基类非静态方法
- 方法重写