多个基类可以有相同的虚方法吗?

Can multiple base classes have the same virtual method?

  1. class A有一个纯虚方法read()
  2. class B 有一个已实现的虚方法 read()
  3. 我有一个 class C 继承了 A 和 B
  4. 这会发生吗?

我想要实现的是两个碱基 classes A 和 B 相互补充。

所以 C read() 方法实际上会调用 class B read()

class A {
    virtual int get_data() = 0;

    void print() {
        log(get_data());
    }
}

class B {
    virtual int get_data() {
        return 4;
    }
}

class C : public A, public B {

}
C my_class;
my_class.print(); // should log 4;

我不在电脑上也没有机会在接下来的几周内进行测试,所以我无法对此进行测试...但我正在设计架构并且需要知道这是否可行以及是否可行.. 这怎么能实现!

Can multiple base classes have the same virtual method?

  1. Can this happen?

是的。

So C read() method would actually call class B read()

这不会自动发生。 base 的成员函数不会覆盖不相关的 base 的函数。

您可以为 C 添加覆盖:

class C : public A, public B {
    int get_data() override;
}

这会覆盖 A::get_dataB::get_data。为了”实际调用class B read()”,你确实可以这样调用:

int C::get_data() {
    return B::get_data();
}

或者...如果您没有声明 B::get_data 私有,那是可能的。


如果您稍微更改层次结构,则可以在不显式委派派生 的情况下覆盖另一个基中的函数。特别是,您需要一个公共基础和虚拟继承:

struct Base {
    virtual int get_data() = 0;
};

struct A : virtual Base {
    void print() {
        std::cout << get_data();
    }
};

struct B : virtual Base {
    int get_data() override {
        return 4;
    }
};

struct C : A, B {};