是否有可能重写特定父类的虚函数

Is it possible to override the virtual function of a specific parent?

本文关键字:函数 父类 有可能 重写 是否      更新时间:2023-10-16

假设您有以下类层次结构:

class A
{
   public:
   virtual void foo() {}
}
class B
{
   public:
   virtual void foo() {}
}
class C: public A, public B
{
    public:
    virtual void foo() override {  } // This overrides both
}
class D: public A, public B
{
    public:
    // Is there syntax so that there is a separate override for each?
    // Maybe something like:
    // virtual void A::foo() override {}
    // virtual void B::foo() override {}
}

是否有办法在类D上有两个foo函数,这样,如果D作为a的引用传递,则调用D中的一个函数,如果D作为B的引用传递,则调用D中的另一个函数?

用例将是,如果你从两个外部库继承,他们只是碰巧有重叠的功能说明符?

您不能完全做到这一点,但是Stroustrup自己演示了一个解决方法。

class A_foo_renamer : public A
{
    virtual void A_foo () = 0;
    virtual void foo() override { A_foo(); }
};
class B_foo_renamer : public B
{
    virtual void B_foo () = 0;
    virtual void foo() override { B_foo(); }
};
class D: public A_foo_renamer, public B_foo_renamer
{
   virtual void A_foo() override {}
   virtual void B_foo() override {}
   // leave A::foo and B::foo alone
};