C++-替换基类方法



我想调用一个基类方法,如果它被重写,则调用被重写的方法,否则,调用基类方法。

这个想法是:我有一个基类虚拟方法,如果满足某些运行时条件,那么我实例化一个派生类方法,它完全取代基类方法。现在,每次调用基类方法时,都会调用派生方法。

我认为这可以通过修改基类的虚拟方法表并将该表中的方法地址替换为";被覆盖";新函数的地址。

我不知道是否可以只使用继承进行归档。如果没有,那么哪种方法是最好的呢?谢谢

您所描述的是非纯虚拟函数的工作方式。

我想从基类实例调用该方法。

示例:

struct Base {
virtual void foo() { std::cout << "base"; };
};
struct Overrides : Base {
void foo() override { std::cout << "overridden"; };
};
int main() {
if (runtime_condition) {
Overrides o;
Base& b = o;
b.foo(); // calls overridden
} else {
Base b;
b.foo(); // calls base
}
};

最新更新