在多重继承布局中单独重写虚拟方法

Overriding virtual methods separately in multiple inheritance layout

本文关键字:重写 虚拟 方法 单独 多重继承 布局      更新时间:2023-10-16

有没有办法在基类中单独覆盖具有相同名称(来自两个父级(的函数?

我正在寻找这样的东西:

#include<iostream>
using namespace std;
class A {
public:
    virtual void foo() {
        cout << "A::Foo" << endl;
    }
};
class B {
public:
    virtual void foo() {
        cout << "B::Foo" << endl;
    }
};
class C : public A, public B {
public:
    /*virtual void A::foo() {
        cout << "C::Foo" << endl;
    }*/ 
};
int main() {
    C c;
    c.A::foo(); // want to get C::Foo here
}

不,你不能这样做。如果要避免通过显式范围解析访问class A; class C;请将A设为私有:

class C : private A, public B {
       // ^^^^^^^
public:
};

如果你想更喜欢A的实现,你可以明确指定你想要使用的内容:

class C : public A, public B {
public:
    using A::foo();
};