是否可以覆盖特定父级的虚函数?

时间:2015-08-06 20:26:11

标签: c++ multiple-inheritance override virtual-functions

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

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中被称为?

用例是你是从两个外部库继承的,它们碰巧有重叠的函数说明符吗?

1 个答案:

答案 0 :(得分:5)

你无法做到这一点,但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
};