c++ - 是否可以覆盖特定父级的虚拟函数?

标签 c++ multiple-inheritance overriding 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 中被调用?

用例是如果您从两个外部库继承,并且它们恰好具有重叠的函数说明符?

最佳答案

您不能完全做到这一点,但 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
};

关于c++ - 是否可以覆盖特定父级的虚拟函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31865152/

相关文章:

c++ - 如何使用 ofstream 打开文件以便其他用户可以追加/写入同一文件?

kotlin - Kotlin继承-使用父构造函数创建子实例

python - Django 休息框架 : override create() in ModelSerializer passing an extra parameter

Java强制复制文件

c++ - 为什么 VBO 顶点大小与用户/系统 CPU 时间使用量成正比?

c++ - 为什么我在打印这个结构指针时出错?

c++ - 如何将垫子中包含的图像复制到更大的垫子上?

python - __bases__ 不起作用!下一步是什么?

Python abc 模块 : Extending both an abstract base class and an exception-derived class leads to surprising behavior

c++ - 覆盖虚拟成员函数时,为什么覆盖函数总是变为虚拟?